blob: 6526ded79de47c6165e43580113f2a6309cb0cd3 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
|
#!/bin/bash
flavor_name="${1}"
image_name="${2}"
network_id="${3}"
keypair_name="${4}"
instance_name="${5}"
ext_network_name="${6}"
if [ "${flavor_name}" == "" ]; then
echo "No flavor name supplied." >&2
exit 1
elif [ "${image_name}" == "" ]; then
echo "No image name supplied." >&2
exit 1
elif [ "${network_id}" == "" ]; then
echo "No network ID supplied." >&2
exit 1
elif [ "${keypair_name}" == "" ]; then
echo "No keypair name supplied." >&2
exit 1
elif [ "${instance_name}" == "" ]; then
echo "No instance name supplied." >&2
exit 1
elif [ "${ext_network_name}" == "" ]; then
echo "No ext network name supplied." >&2
exit 1
fi
associate_floating_ip () {
for line in $(openstack floating ip list | grep -F 'None' | sed -e 's/ //g'); do
floating_ip_id=$(echo ${line} | awk -F\| '{print $2;}')
floating_ip=$(echo ${line} | awk -F\| '{print $3;}')
floating_ip_port=$(echo ${line} | awk -F\| '{print $5;}')
if [ "${floating_ip_port}" == "None" ]; then
nova floating-ip-associate "${1}" "${floating_ip}" >/dev/null 2>&1
echo "${floating_ip}"
return 0
fi
done
return 1
}
image_id=$(openstack image list --limit 1000 --public 2>/dev/null | grep -F " ${image_name} " | awk '{print $2;}')
if [ "${image_id}" == "" ]; then
echo "Could not find id for image ${image_name}" >&2
exit 1
fi
instance_number=1
for num in $(openstack server list --limit 1000 2>/dev/null | grep -F "${instance_name}" | awk '{print $4;}' | awk -F- '{print $4;}' | sort); do
if (( "${num}" == ${instance_number} )); then
instance_number=$(expr ${instance_number} + 1)
fi
done
# TODO: rewrite with openstack server create
instance_id=$(nova boot \
--flavor "${flavor_name}" \
--block-device source=image,id=${image_id},dest=volume,size=20,shutdown=preserve,bootindex=0 \
--nic net-id="${network_id}" \
--security-groups "default-grp,dns,galera,vertx,web" \
--key-name "${keypair_name}" \
--user-data "data/etc/cloud/cloud.cfg" \
--poll \
"${instance_name}-${instance_number}" \
| grep -F ' id ' | awk '{print $4;}')
if [ "${instance_id}" == "" ]; then
echo "Instance creation did not return an ID." >&2
exit 1
fi
floating_ip_assigned=$(associate_floating_ip ${instance_id})
if (( ${?} == 1 )); then
openstack floating ip create ${ext_network_name} >/dev/null 2>&1
if (( ${?} == 0 )); then
floating_ip_assigned=$(associate_floating_ip ${instance_id})
if (( ${?} == 1 )); then
echo "Could not associate floating IP." >&2
exit 1
fi
fi
fi
# TODO: rewrite with openstackclient command
for sec in default-grp dns galera vertx web; do
nova add-secgroup ${instance_id} ${sec} >/dev/null 2>&1
done
echo "${floating_ip_assigned}"
echo "${instance_name}-${instance_number}"
exit 0
|