summaryrefslogtreecommitdiffstats
path: root/controller/get_machine
blob: 71211145a66fd47c6a3f069bfc9d74328aeb59fa (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
#!/bin/bash

die() { echo "$@" ; exit 1 ; }
info() { echo " * $@" ; }

opt_openstack_instance=os1
opt_distro=fedora
opt_distro_version=20

function show_help()
{
cat <<EOHELP >&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"