#!/bin/bash die() { echo "$@" ; exit 1 ; } info() { echo " * $@" ; } opt_openstack_instance=os1 opt_distro=fedora opt_distro_version=20 function show_help() { cat <&2 Usage: $0 OPTION Script is aimed to help sysadmin. Options: --distro=NAME Distro name, like fedora --distro-version=VERSION E.g. 20 for Fedora 20 --openstack-instance=ID --name=NAME Name of the machine EOHELP test -n "$1" && exit "$1" } boot() ( set -o pipefail nova boot "$1" --poll \ --image "$2" \ --flavor "$3" \ --security-groups "$os_security_group" \ --key-name "$os_keypair" \ | grep "| id " | cut -d\| -f 3 | xargs -n 1 ) get_ip() ( id="$1" set -o pipefail nova show "$id" | grep ' network ' \ | cut -d\| -f 3 | cut -d, -f2 | xargs -n 1 ) longopts="distro:,distro-version:,openstack-instance:,name:" ARGS=$(getopt -o "" -l "help,$longopts" -n "$0" -- "$@") \ || exit 1 eval set -- "$ARGS" while true; do case "$1" in --distro|--distro-version|--openstack-instance|--name) opt=$(sed -e 's/^--//' -e 's/[^[a-zA-Z0-9]/_/g'<<<"$1") eval "opt_$opt=\"${2,,}\"" shift 2 ;; --help) show_help 0 ;; --) shift break; esac done . ./parse_credsfile "$opt_openstack_instance" || exit 1 . ./config/os/"$opt_openstack_instance.sh" || exit 1 image_version=$opt_distro$opt_distro_version image=${os_image_ids[$image_version]} flavor=${os_flavor_ids[$image_version]} test -z "$image" && die "no image for '$image_version'" test -z "$flavor" && die "no flavor for '$image_version'" test -z "$opt_name" && opt_name="testing-$image" info "booting machine $image_version from $image" machine=$(boot "$opt_name" "$image" "$flavor") info "machine id: $machine" ip=$(get_ip "$machine") info "ip: $ip"