From 32086f62131e1b813e2f3d97bc2c78f66c6a3154 Mon Sep 17 00:00:00 2001 From: Carlos Konstanski Date: Wed, 13 Dec 2017 18:54:21 -0700 Subject: adding files --- files/instance.sh | 94 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 94 insertions(+) create mode 100755 files/instance.sh (limited to 'files/instance.sh') 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 -- cgit v1.3