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