9e1c3f1168b8548ce87c4346d2feadff141eb647
[bottlenecks.git] / utils / infra_setup / heat_template / HOT_create_instance.sh
1 #!/bin/bash
2
3 set -ex
4
5 bottlenecks_env_prepare()
6 {
7    if [ -d $BOTTLENECKS_REPO_DIR ]; then
8        rm -rf ${BOTTLENECKS_REPO_DIR}
9    fi
10
11    mkdir -p ${BOTTLENECKS_REPO_DIR}
12    git config --global http.sslVerify false
13    git clone ${BOTTLENECKS_REPO} ${BOTTLENECKS_REPO_DIR}
14
15    source $BOTTLENECKS_REPO_DIR/rubbos/rubbos_scripts/1-1-1/scripts/env_preparation.sh
16 }
17
18 bottlenecks_create_instance()
19 {
20    echo "create bottlenecks instance using heat template"
21
22    echo "upload keypair"
23    nova keypair-add --pub_key $KEY_PATH/bottlenecks_key.pub $KEY_NAME
24
25    echo "create flavor"
26    nova flavor-create $FLAVOR_NAME 200 2048 10 1
27
28    echo "use heat template to create stack"
29    cd $HOT_PATH
30    heat stack-create bottlenecks -f ${TEMPLATE_NAME} \
31         -P "image=$IMAGE_NAME;key_name=$KEY_NAME;public_net=$PUBLIC_NET_NAME;flavor=$FLAVOR_NAME"
32    sleep 120
33    heat stack-list
34    heat stack-show bottlenecks
35    nova list
36    nova list | grep rubbos_control
37 }
38
39 bottlenecks_rubbos_run()
40 {
41    echo "Run Rubbos"
42    control_ip=$(nova list | grep rubbos_control | awk '{print $13}')
43    for i in rubbos_benchmark rubbos_client1 rubbos_client2 rubbos_client3 \
44             rubbos_client4 rubbos_control rubbos_httpd rubbos_mysql1 \
45             rubbos_tomcat1
46    do
47          ip=$(nova list | grep $i | awk '{print $12}' | awk -F [=,] '{print $2}')
48          echo "$i=$ip" >> $BOTTLENECKS_REPO_DIR/utils/infra_setup/vm_dev_setup/hosts.conf
49    done
50
51    chmod 600 $KEY_PATH/bottlenecks_key
52    ssh -i $KEY_PATH/bottlenecks_key \
53        -o StrictHostKeyChecking=no \
54        -o BatchMode=yes root@$control_ip "uname -a"
55    scp -r -i $KEY_PATH/bottlenecks_key \
56        -o StrictHostKeyChecking=no -o BatchMode=yes \
57        $BOTTLENECKS_REPO_DIR/utils/infra_setup/vm_dev_setup \
58        root@$control_ip:/tmp
59    ssh -i $KEY_PATH/bottlenecks_key \
60        -o StrictHostKeyChecking=no \
61        -o BatchMode=yes root@$control_ip "bash /tmp/vm_dev_setup/setup_env.sh"
62
63    rm -rf $BOTTLENECKS_REPO_DIR/utils/infra_setup/vm_dev_setup/hosts.conf
64
65 }
66
67 bottlenecks_cleanup()
68 {
69    echo "clean up bottlenecks images and keys"
70
71    if heat stack-list; then
72        for stack in $(heat stack-list | grep -e bottlenecks | awk '{print $2}'); do
73            echo "clean up stack $stack"
74            heat stack-delete $stack || true
75            sleep 30
76        done
77    fi
78
79    if glance image-list; then
80        for image in $(glance image-list | grep -e $IMAGE_NAME | awk '{print $2}'); do
81            echo "clean up image $image"
82            glance image-delete $image || true
83        done
84    fi
85
86    if nova keypair-list; then
87        for key in $(nova keypair-list | grep -e $KEY_NAME | awk '{print $2}'); do
88            echo "clean up key $key"
89            nova keypair-delete $key || true
90        done
91    fi
92
93    if nova flavor-list; then
94        for flavor in $(nova flavor-list | grep -e $FLAVOR_NAME | awk '{print $2}'); do
95            echo "clean up flavor $flavor"
96            nova flavor-delete $flavor || true
97        done
98    fi
99 }
100
101 bottlenecks_load_bottlenecks_image()
102 {
103    echo "load bottlenecks image"
104
105    curl --connect-timeout 10 -o /tmp/bottlenecks-trusty-server.img $IMAGE_URL -v
106    #if [ $? != 0 ]; then
107         wget http://download.cirros-cloud.net/0.3.3/cirros-0.3.3-x86_64-disk.img -O \
108              /tmp/bottlenecks-trusty-server.img
109    #fi
110
111    result=$(glance image-create \
112        --name $IMAGE_NAME \
113        --disk-format qcow2 \
114        --container-format bare \
115        --file /tmp/bottlenecks-trusty-server.img)
116    echo "$result"
117
118    rm -rf /tmp/bottlenecks-trusty-server.img
119
120    IMAGE_ID_BOTTLENECKS=$(echo "$result" | grep " id " | awk '{print $(NF-1)}')
121    if [ -z "$IMAGE_ID_BOTTLENECKS" ]; then
122         echo 'failed to upload bottlenecks image to openstack'
123         exit 1
124    fi
125
126    echo "bottlenecks image id: $IMAGE_ID_BOTTLENECKS"
127 }
128
129 main()
130 {
131    echo "create instances with heat template"
132
133    BOTTLENECKS_REPO=https://gerrit.opnfv.org/gerrit/bottlenecks
134    BOTTLENECKS_REPO_DIR=/tmp/opnfvrepo/bottlenecks
135    IMAGE_URL=http://artifacts.opnfv.org/bottlenecks/rubbos/bottlenecks-trusty-server.img
136    IMAGE_NAME=bottlenecks-trusty-server
137    KEY_PATH=$BOTTLENECKS_REPO_DIR/utils/infra_setup/bottlenecks_key
138    HOT_PATH=$BOTTLENECKS_REPO_DIR/utils/infra_setup/heat_template
139    KEY_NAME=bottlenecks-key
140    FLAVOR_NAME=bottlenecks-flavor
141    TEMPLATE_NAME=bottlenecks_rubbos_hot.yaml
142    PUBLIC_NET_NAME=net04_ext
143
144    bottlenecks_env_prepare
145    bottlenecks_cleanup
146    bottlenecks_load_bottlenecks_image
147    bottlenecks_create_instance
148    bottlenecks_rubbos_run
149    bottlenecks_cleanup
150 }
151
152 main
153 set +ex
154