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