Update stack creation status check
[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     chmod 600 $KEY_PATH/bottlenecks_key
17 }
18
19 wait_heat_stack_complete() {
20     retry=0
21     while true
22     do
23         status=$(heat stack-list | grep bottlenecks | awk '{print $6}')
24         if [ x$status = x"CREATE_COMPLETE" ]; then
25             echo "bottlenecks stacke create complete"
26             heat stack-show bottlenecks
27             break;
28         fi
29         echo "bottlenecks stack status $status"
30         sleep 1
31         let retry+=1
32         if [[ $retry -ge $1 ]];then
33             echo "Heat stack create timeout!!!"
34             exit 1
35         fi
36     done
37 }
38
39 wait_rubbos_control_ok() {
40     control_ip=$(nova list | grep rubbos_control | awk '{print $13}')
41
42     retry=0
43     until timeout 1s ssh $ssh_args ec2-user@$control_ip "exit" >/dev/null 2>&1
44     do
45         echo "retry connect rubbos control $retry"
46         sleep 1
47         let retry+=1
48         if [[ $retry -ge $1 ]];then
49             echo "rubbos control start timeout !!!"
50             exit 1
51         fi
52     done
53     ssh $ssh_args ec2-user@$control_ip "uname -a"
54 }
55
56 bottlenecks_check_instance_ok()
57 {
58     echo "check instance"
59
60     wait_heat_stack_complete 120
61     wait_rubbos_control_ok 300
62     nova list | grep rubbos_
63 }
64
65 bottlenecks_create_instance()
66 {
67     echo "create bottlenecks instance using heat template"
68
69     echo "upload keypair"
70     nova keypair-add --pub_key $KEY_PATH/bottlenecks_key.pub $KEY_NAME
71
72     echo "create flavor"
73     nova flavor-create $FLAVOR_NAME 200 2048 10 1
74
75     echo "use heat template to create stack"
76     cd $HOT_PATH
77     heat stack-create bottlenecks -f ${TEMPLATE_NAME} \
78          -P "image=$IMAGE_NAME;key_name=$KEY_NAME;public_net=$PUBLIC_NET_NAME;flavor=$FLAVOR_NAME"
79 }
80
81 bottlenecks_rubbos_run()
82 {
83     echo "Run Rubbos"
84     control_ip=$(nova list | grep rubbos_control | awk '{print $13}')
85     for i in rubbos_benchmark rubbos_client1 rubbos_client2 rubbos_client3 \
86              rubbos_client4 rubbos_control rubbos_httpd rubbos_mysql1 \
87              rubbos_tomcat1
88     do
89           ip=$(nova list | grep $i | awk '{print $12}' | awk -F [=,] '{print $2}')
90           echo "$i=$ip" >> $BOTTLENECKS_REPO_DIR/utils/infra_setup/vm_dev_setup/hosts.conf
91     done
92
93     scp $ssh_args -r \
94         $BOTTLENECKS_REPO_DIR/utils/infra_setup/vm_dev_setup \
95         ec2-user@$control_ip:/tmp
96     ssh $ssh_args \
97         ec2-user@$control_ip "bash /tmp/vm_dev_setup/setup_env.sh"
98
99     rm -rf $BOTTLENECKS_REPO_DIR/utils/infra_setup/vm_dev_setup/hosts.conf
100 }
101
102 bottlenecks_cleanup()
103 {
104     echo "clean up bottlenecks images and keys"
105
106     if heat stack-list; then
107         for stack in $(heat stack-list | grep -e bottlenecks | awk '{print $2}'); do
108             echo "clean up stack $stack"
109             heat stack-delete $stack || true
110             sleep 30
111         done
112     fi
113
114     if glance image-list; then
115         for image in $(glance image-list | grep -e $IMAGE_NAME | awk '{print $2}'); do
116             echo "clean up image $image"
117             glance image-delete $image || true
118         done
119     fi
120
121     if nova keypair-list; then
122         for key in $(nova keypair-list | grep -e $KEY_NAME | awk '{print $2}'); do
123             echo "clean up key $key"
124             nova keypair-delete $key || true
125         done
126     fi
127
128     if nova flavor-list; then
129         for flavor in $(nova flavor-list | grep -e $FLAVOR_NAME | awk '{print $2}'); do
130             echo "clean up flavor $flavor"
131             nova flavor-delete $flavor || true
132         done
133     fi
134 }
135
136 bottlenecks_load_bottlenecks_image()
137 {
138     echo "load bottlenecks image"
139
140     curl --connect-timeout 10 -o /tmp/bottlenecks-trusty-server.img $IMAGE_URL -v
141
142     result=$(glance image-create \
143         --name $IMAGE_NAME \
144         --disk-format qcow2 \
145         --container-format bare \
146         --file /tmp/bottlenecks-trusty-server.img)
147     echo "$result"
148
149     rm -rf /tmp/bottlenecks-trusty-server.img
150
151     IMAGE_ID_BOTTLENECKS=$(echo "$result" | grep " id " | awk '{print $(NF-1)}')
152     if [ -z "$IMAGE_ID_BOTTLENECKS" ]; then
153          echo 'failed to upload bottlenecks image to openstack'
154          exit 1
155     fi
156
157     echo "bottlenecks image id: $IMAGE_ID_BOTTLENECKS"
158 }
159
160 main()
161 {
162     echo "create instances with heat template"
163
164     BOTTLENECKS_REPO=https://gerrit.opnfv.org/gerrit/bottlenecks
165     BOTTLENECKS_REPO_DIR=/tmp/opnfvrepo/bottlenecks
166     #IMAGE_URL=http://artifacts.opnfv.org/bottlenecks/rubbos/bottlenecks-trusty-server.img
167     IMAGE_URL=https://cloud-images.ubuntu.com/trusty/current/trusty-server-cloudimg-amd64-disk1.img
168     IMAGE_NAME=bottlenecks-trusty-server
169     KEY_PATH=$BOTTLENECKS_REPO_DIR/utils/infra_setup/bottlenecks_key
170     HOT_PATH=$BOTTLENECKS_REPO_DIR/utils/infra_setup/heat_template
171     KEY_NAME=bottlenecks-key
172     FLAVOR_NAME=bottlenecks-flavor
173     TEMPLATE_NAME=bottlenecks_rubbos_hot.yaml
174     PUBLIC_NET_NAME=net04_ext
175     ssh_args="-o StrictHostKeyChecking=no -o BatchMode=yes -i $KEY_PATH/bottlenecks_key"
176
177     bottlenecks_env_prepare
178     bottlenecks_cleanup
179     bottlenecks_load_bottlenecks_image
180     bottlenecks_create_instance
181     bottlenecks_check_instance_ok
182     bottlenecks_rubbos_run
183     bottlenecks_cleanup
184 }
185
186 main
187 set +ex
188