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