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