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