55198beb28ba888ef1b0268833c84797cf95ec33
[bottlenecks.git] / utils / infra_setup / heat_template / HOT_create_instance.sh
1 #!/bin/bash
2
3 set -x
4
5 bottlenecks_env_prepare()
6 {
7     echo "Bottlenecks env prepare start $(date)"
8
9     if [ -d $BOTTLENECKS_REPO_DIR ]; then
10         rm -rf ${BOTTLENECKS_REPO_DIR}
11     fi
12
13     mkdir -p ${BOTTLENECKS_REPO_DIR}
14     git config --global http.sslVerify false
15     git clone ${BOTTLENECKS_REPO} ${BOTTLENECKS_REPO_DIR}
16     if [ x"$GERRIT_REFSPEC_DEBUG" != x ]; then
17         cd ${BOTTLENECKS_REPO_DIR}
18         git fetch $BOTTLENECKS_REPO $GERRIT_REFSPEC_DEBUG && git checkout FETCH_HEAD
19         cd -
20     fi
21
22     source $BOTTLENECKS_REPO_DIR/rubbos/rubbos_scripts/1-1-1/scripts/env_preparation.sh
23     chmod 600 $KEY_PATH/bottlenecks_key
24
25     echo "Bottlenecks env prepare end $(date)"
26 }
27
28 wait_heat_stack_complete() {
29     retry=0
30     while true
31     do
32         status=$(heat stack-list | grep bottlenecks | awk '{print $6}')
33         if [ x$status = x"CREATE_COMPLETE" ]; then
34             echo "bottlenecks stacke create complete"
35             heat stack-show bottlenecks
36             nova list | grep rubbos_
37             break;
38         elif [ x$status = x"CREATE_FAILED" ]; then
39             echo "bottlenecks stacke create failed !!!"
40             heat stack-show bottlenecks
41             exit 1
42         fi
43
44         #if [ $BOTTLENECKS_DEBUG = True ]; then
45         if false; then
46             heat stack-show bottlenecks
47             nova list | grep rubbos_
48             for i in $(nova list | grep rubbos_ | grep ERROR | awk '{print $2}')
49             do
50                  nova show $i
51             done
52         fi
53         sleep 1
54         let retry+=1
55         if [[ $retry -ge $1 ]];then
56             echo "Heat stack create timeout, status $status !!!"
57             exit 1
58         fi
59     done
60 }
61
62 wait_rubbos_control_ok() {
63     control_ip=$(nova list | grep rubbos_control | awk '{print $13}')
64
65     retry=0
66     until timeout 3s ssh $ssh_args ec2-user@$control_ip "exit" >/dev/null 2>&1
67     do
68         echo "retry connect rubbos control $retry"
69         sleep 1
70         let retry+=1
71         if [[ $retry -ge $1 ]];then
72             echo "rubbos control start timeout !!!"
73             exit 1
74         fi
75     done
76     ssh $ssh_args ec2-user@$control_ip "uname -a"
77 }
78
79 bottlenecks_check_instance_ok()
80 {
81     echo "Bottlenecks check instance ok start $(date)"
82
83     wait_heat_stack_complete 120
84     wait_rubbos_control_ok 300
85     nova list | grep rubbos_
86     if [ $BOTTLENECKS_DEBUG = True ]; then
87         date
88         while true
89         do
90             for i in rubbos_benchmark rubbos_client1 rubbos_client2 rubbos_client3 \
91                      rubbos_client4 rubbos_control rubbos_httpd rubbos_mysql1 rubbos_tomcat1
92             do
93                echo "logging $i"
94                nova console-log $i | tail -n 2 | grep Cloud-init | grep finished
95                if [ $? != 0 ]; then
96                    break
97                fi
98                if [ $i = rubbos_tomcat1 ]; then
99                    echo "all vm Cloud-init finished!"
100                    date
101                    return
102                fi
103             done
104             sleep 10
105         done
106     fi
107
108     echo "Bottlenecks check instance ok end $(date)"
109 }
110
111 bottlenecks_create_instance()
112 {
113     echo "Bottlenecks create instance using heat template start $(date)"
114
115     echo "upload keypair"
116     nova keypair-add --pub_key $KEY_PATH/bottlenecks_key.pub $KEY_NAME
117
118     echo "create flavor"
119     nova flavor-create $FLAVOR_NAME 200 4096 20 4
120
121     echo "use heat template to create stack"
122     cd $HOT_PATH
123     heat stack-create bottlenecks -f ${TEMPLATE_NAME} \
124          -P "image=$IMAGE_NAME;key_name=$KEY_NAME;public_net=$PUBLIC_NET_NAME;flavor=$FLAVOR_NAME"
125
126     echo "Bottlenecks create instance using heat template end $(date)"
127 }
128
129 bottlenecks_rubbos_wait_finish()
130 {
131     echo "Start checking rubbos running status..."
132     retry=0
133     while true
134     do
135         ssh $ssh_args ec2-user@$control_ip "FILE=/tmp/rubbos_finished; if [ -f \$FILE ]; then exit 0; else exit 1; fi"
136         if [ $? = 0 ]; then
137             echo "Rubbos test case successfully finished :)"
138             return 0
139         fi
140         echo "Rubbos running $retry ..."
141         sleep 30
142         let retry+=1
143         if [[ $retry -ge $1 ]]; then
144             echo "Rubbos test case timeout :("
145             return 1
146         fi
147     done
148 }
149
150 bottlenecks_rubbos_run()
151 {
152     echo "Run Rubbos"
153     control_ip=$(nova list | grep rubbos_control | awk '{print $13}')
154     for i in rubbos_benchmark rubbos_client1 rubbos_client2 rubbos_client3 \
155              rubbos_client4 rubbos_control rubbos_httpd rubbos_mysql1 \
156              rubbos_tomcat1
157     do
158           ip=$(nova list | grep $i | awk '{print $12}' | awk -F [=,] '{print $2}')
159           echo "$i=$ip" >> $BOTTLENECKS_REPO_DIR/utils/infra_setup/vm_dev_setup/hosts.conf
160     done
161
162     nameserver_ip=$(grep -m 1 '^nameserver' \
163         /etc/resolv.conf | awk '{ print $2 '})
164     echo "nameserver_ip=$nameserver_ip" >> $BOTTLENECKS_REPO_DIR/utils/infra_setup/vm_dev_setup/hosts.conf
165
166     echo "GERRIT_REFSPEC_DEBUG=$GERRIT_REFSPEC_DEBUG" >> $BOTTLENECKS_REPO_DIR/utils/infra_setup/vm_dev_setup/hosts.conf
167
168     echo "POD_NAME=$POD_NAME" >> $BOTTLENECKS_REPO_DIR/utils/infra_setup/vm_dev_setup/hosts.conf
169     echo "INSTALLER_TYPE=$INSTALLER_TYPE" >> $BOTTLENECKS_REPO_DIR/utils/infra_setup/vm_dev_setup/hosts.conf
170     echo "BOTTLENECKS_VERSION=$BOTTLENECKS_VERSION" >> $BOTTLENECKS_REPO_DIR/utils/infra_setup/vm_dev_setup/hosts.conf
171     echo "BOTTLENECKS_DB_TARGET=$BOTTLENECKS_DB_TARGET" >> $BOTTLENECKS_REPO_DIR/utils/infra_setup/vm_dev_setup/hosts.conf
172
173     scp $ssh_args -r \
174         $BOTTLENECKS_REPO_DIR/utils/infra_setup/vm_dev_setup \
175         ec2-user@$control_ip:/tmp
176     ssh $ssh_args \
177         ec2-user@$control_ip "bash /tmp/vm_dev_setup/setup_env.sh" &
178
179     bottlenecks_rubbos_wait_finish 200
180
181     rm -rf $BOTTLENECKS_REPO_DIR/utils/infra_setup/vm_dev_setup/hosts.conf
182 }
183
184 bottlenecks_cleanup()
185 {
186     echo "Bottlenecks cleanup start $(date)"
187
188     if heat stack-list; then
189         for stack in $(heat stack-list | grep -e bottlenecks | awk '{print $2}'); do
190             echo "clean up stack $stack"
191             heat stack-delete $stack || true
192             sleep 30
193         done
194     fi
195
196     if glance image-list; then
197         for image in $(glance image-list | grep -e $IMAGE_NAME | awk '{print $2}'); do
198             echo "clean up image $image"
199             glance image-delete $image || true
200         done
201     fi
202
203     if nova keypair-list; then
204         for key in $(nova keypair-list | grep -e $KEY_NAME | awk '{print $2}'); do
205             echo "clean up key $key"
206             nova keypair-delete $key || true
207         done
208     fi
209
210     if nova flavor-list; then
211         for flavor in $(nova flavor-list | grep -e $FLAVOR_NAME | awk '{print $2}'); do
212             echo "clean up flavor $flavor"
213             nova flavor-delete $flavor || true
214         done
215     fi
216
217     echo "Bottlenecks cleanup end $(date)"
218 }
219
220 bottlenecks_load_bottlenecks_image()
221 {
222     echo "Bottlenecks load image start $(date)"
223
224     curl --connect-timeout 10 -o /tmp/bottlenecks-trusty-server.img $IMAGE_URL -v
225
226     result=$(glance image-create \
227         --name $IMAGE_NAME \
228         --disk-format qcow2 \
229         --container-format bare \
230         --file /tmp/bottlenecks-trusty-server.img)
231     echo "$result"
232
233     rm -rf /tmp/bottlenecks-trusty-server.img
234
235     IMAGE_ID_BOTTLENECKS=$(echo "$result" | grep " id " | awk '{print $(NF-1)}')
236     if [ -z "$IMAGE_ID_BOTTLENECKS" ]; then
237          echo 'failed to upload bottlenecks image to openstack'
238          exit 1
239     fi
240
241     echo "bottlenecks image end id: $IMAGE_ID_BOTTLENECKS $(date)"
242 }
243
244 main()
245 {
246     echo "main start $(date)"
247
248     BOTTLENECKS_DEBUG=True
249     BOTTLENECKS_REPO=https://gerrit.opnfv.org/gerrit/bottlenecks
250     BOTTLENECKS_REPO_DIR=/tmp/opnfvrepo/bottlenecks
251     IMAGE_URL=http://artifacts.opnfv.org/bottlenecks/rubbos/bottlenecks-trusty-server.img
252     #IMAGE_URL=https://cloud-images.ubuntu.com/trusty/current/trusty-server-cloudimg-amd64-disk1.img
253     IMAGE_NAME=bottlenecks-trusty-server
254     KEY_PATH=$BOTTLENECKS_REPO_DIR/utils/infra_setup/bottlenecks_key
255     HOT_PATH=$BOTTLENECKS_REPO_DIR/utils/infra_setup/heat_template
256     KEY_NAME=bottlenecks-key
257     FLAVOR_NAME=bottlenecks-flavor
258     TEMPLATE_NAME=bottlenecks_rubbos_hot.yaml
259     PUBLIC_NET_NAME=net04_ext
260     ssh_args="-o StrictHostKeyChecking=no -o BatchMode=yes -i $KEY_PATH/bottlenecks_key"
261     : ${POD_NAME:='opnfv-jump-2'}
262     : ${INSTALLER_TYPE:='fuel'}
263     : ${BOTTLENECKS_VERSION:='master'}
264     : ${BOTTLENECKS_DB_TARGET:='213.77.62.197'}
265
266     bottlenecks_env_prepare
267     set -x
268     bottlenecks_cleanup
269     bottlenecks_load_bottlenecks_image
270     bottlenecks_create_instance
271     bottlenecks_check_instance_ok
272     bottlenecks_rubbos_run
273     bottlenecks_cleanup
274     echo "main end $(date)"
275 }
276
277 main
278 set +x
279