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