summaryrefslogtreecommitdiff
path: root/files/instance.sh
diff options
context:
space:
mode:
authorCarlos Konstanski <ckonstanski@pippiandcarlos.com>2017-12-13 18:54:21 -0700
committerCarlos Konstanski <ckonstanski@pippiandcarlos.com>2017-12-13 18:54:21 -0700
commit32086f62131e1b813e2f3d97bc2c78f66c6a3154 (patch)
tree2005059011aea64121af64de5b3567fd0dcbca3b /files/instance.sh
parent21fa10807bb475bff42a997ac4add3cc7e6346f9 (diff)
adding files
Diffstat (limited to 'files/instance.sh')
-rwxr-xr-xfiles/instance.sh94
1 files changed, 94 insertions, 0 deletions
diff --git a/files/instance.sh b/files/instance.sh
new file mode 100755
index 0000000..6526ded
--- /dev/null
+++ b/files/instance.sh
@@ -0,0 +1,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