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