2 ##############################################################################
3 # Copyright (c) 2015 Huawei Technologies Co.,Ltd and others.
5 # All rights reserved. This program and the accompanying materials
6 # are made available under the terms of the Apache License, Version 2.0
7 # which accompanies this distribution, and is available at
8 # http://www.apache.org/licenses/LICENSE-2.0
9 ##############################################################################
15 if git cat-file -e $1^{commit} 2>/dev/null; then
16 # branch, tag or sha1 object
20 git fetch --tags --progress $2 $1
21 git checkout FETCH_HEAD
25 bottlenecks_env_prepare() {
27 echo "Bottlenecks env prepare start $(date)"
28 git config --global http.sslVerify false
30 if [ ! -d $BOTTLENECKS_REPO_DIR ]; then
31 git clone $BOTTLENECKS_REPO $BOTTLENECKS_REPO_DIR
33 cd $BOTTLENECKS_REPO_DIR
34 git checkout master && git pull
35 git_checkout $BOTTLENECKS_BRANCH $BOTTLENECKS_REPO
38 echo "Creating openstack credentials .."
39 if [ ! -d $RELENG_REPO_DIR ]; then
40 git clone $RELENG_REPO $RELENG_REPO_DIR
43 git checkout master && git pull
44 git_checkout $RELENG_BRANCH $RELENG_REPO
47 # Create openstack credentials
48 $RELENG_REPO_DIR/utils/fetch_os_creds.sh \
50 -i ${INSTALLER_TYPE} -a ${INSTALLER_IP}
54 chmod 600 $KEY_PATH/bottlenecks_key
56 echo "Bottlenecks env prepare end $(date)"
60 wait_heat_stack_complete() {
64 status=$(heat stack-list | grep bottlenecks | awk '{print $6}')
65 if [ x$status = x"CREATE_COMPLETE" ]; then
66 echo "bottlenecks stacke create complete"
67 heat stack-show bottlenecks
68 nova list | grep rubbos_
70 elif [ x$status = x"CREATE_FAILED" ]; then
71 echo "bottlenecks stacke create failed !!!"
72 heat stack-show bottlenecks
76 #if [ $BOTTLENECKS_DEBUG = True ]; then
78 heat stack-show bottlenecks
79 nova list | grep rubbos_
80 for i in $(nova list | grep rubbos_ | grep ERROR | awk '{print $2}')
87 if [[ $retry -ge $1 ]];then
88 echo "Heat stack create timeout, status $status !!!"
94 wait_rubbos_control_ok() {
95 control_ip=$(nova list | grep rubbos_control | awk '{print $13}')
98 until timeout 3s ssh $ssh_args ubuntu@$control_ip "exit" >/dev/null 2>&1
100 echo "retry connect rubbos control $retry"
103 if [[ $retry -ge $1 ]];then
104 echo "rubbos control start timeout !!!"
108 ssh $ssh_args ubuntu@$control_ip "uname -a"
111 bottlenecks_check_instance_ok()
113 echo "Bottlenecks check instance ok start $(date)"
115 wait_heat_stack_complete 120
116 wait_rubbos_control_ok 300
117 nova list | grep rubbos_
118 if [ $BOTTLENECKS_DEBUG = True ]; then
122 for i in rubbos_benchmark rubbos_client1 rubbos_client2 rubbos_client3 \
123 rubbos_client4 rubbos_control rubbos_httpd rubbos_mysql1 rubbos_tomcat1
126 nova console-log $i | tail -n 2 | grep Cloud-init | grep finished
130 if [ $i = rubbos_tomcat1 ]; then
131 echo "all vm Cloud-init finished!"
140 echo "Bottlenecks check instance ok end $(date)"
143 bottlenecks_create_instance()
145 echo "Bottlenecks create instance using heat template start $(date)"
147 echo "upload keypair"
148 nova keypair-add --pub_key $KEY_PATH/bottlenecks_key.pub $KEY_NAME
151 nova flavor-create $FLAVOR_NAME 200 4096 20 2
153 echo "use heat template to create stack"
155 heat stack-create bottlenecks -f ${TEMPLATE_NAME} \
156 -P "image=$IMAGE_NAME;key_name=$KEY_NAME;public_net=$EXTERNAL_NET;flavor=$FLAVOR_NAME"
158 echo "Bottlenecks create instance using heat template end $(date)"
161 bottlenecks_rubbos_wait_finish()
163 echo "Start checking rubbos running status..."
167 ssh $ssh_args ubuntu@$control_ip "FILE=/tmp/rubbos_finished; if [ -f \$FILE ]; then exit 0; else exit 1; fi"
169 echo "Rubbos test case successfully finished :)"
172 echo "Rubbos running $retry ..."
175 if [[ $retry -ge $1 ]]; then
176 echo "Rubbos test case timeout :("
182 bottlenecks_rubbos_run()
185 control_ip=$(nova list | grep rubbos_control | awk '{print $13}')
186 for i in rubbos_benchmark rubbos_client1 rubbos_client2 rubbos_client3 \
187 rubbos_client4 rubbos_control rubbos_httpd rubbos_mysql1 \
190 ip=$(nova list | grep $i | awk '{print $12}' | awk -F [=,] '{print $2}')
191 echo "$i=$ip" >> $BOTTLENECKS_REPO_DIR/utils/infra_setup/vm_dev_setup/hosts.conf
194 nameserver_ip=$(grep -m 1 '^nameserver' \
195 /etc/resolv.conf | awk '{ print $2 '})
196 echo "nameserver_ip=$nameserver_ip" >> $BOTTLENECKS_REPO_DIR/utils/infra_setup/vm_dev_setup/hosts.conf
198 echo "GERRIT_REFSPEC_DEBUG=$GERRIT_REFSPEC_DEBUG" >> $BOTTLENECKS_REPO_DIR/utils/infra_setup/vm_dev_setup/hosts.conf
199 echo "BOTTLENECKS_BRANCH=$BOTTLENECKS_BRANCH" >> $BOTTLENECKS_REPO_DIR/utils/infra_setup/vm_dev_setup/hosts.conf
201 echo "NODE_NAME=$NODE_NAME" >> $BOTTLENECKS_REPO_DIR/utils/infra_setup/vm_dev_setup/hosts.conf
202 echo "INSTALLER_TYPE=$INSTALLER_TYPE" >> $BOTTLENECKS_REPO_DIR/utils/infra_setup/vm_dev_setup/hosts.conf
203 echo "BOTTLENECKS_VERSION=$BOTTLENECKS_VERSION" >> $BOTTLENECKS_REPO_DIR/utils/infra_setup/vm_dev_setup/hosts.conf
204 echo "BOTTLENECKS_DB_TARGET=$BOTTLENECKS_DB_TARGET" >> $BOTTLENECKS_REPO_DIR/utils/infra_setup/vm_dev_setup/hosts.conf
205 echo "PACKAGE_URL=$PACKAGE_URL" >> $BOTTLENECKS_REPO_DIR/utils/infra_setup/vm_dev_setup/hosts.conf
208 $BOTTLENECKS_REPO_DIR/utils/infra_setup/vm_dev_setup \
209 ubuntu@$control_ip:/tmp
211 ubuntu@$control_ip "bash /tmp/vm_dev_setup/setup_env.sh" &
213 bottlenecks_rubbos_wait_finish 200
215 if [ x"$GERRIT_REFSPEC_DEBUG" != x ]; then
216 # TODO fix hard coded path
218 ubuntu@$control_ip:"/bottlenecks/rubbos/rubbos_results/2015-01-20T081237-0700.tgz" /tmp
221 rm -rf $BOTTLENECKS_REPO_DIR/utils/infra_setup/vm_dev_setup/hosts.conf
224 bottlenecks_cleanup()
226 echo "Bottlenecks cleanup start $(date)"
228 if heat stack-list; then
229 for stack in $(heat stack-list | grep -e bottlenecks | awk '{print $2}'); do
230 echo "clean up stack $stack"
231 heat stack-delete $stack || true
236 if glance image-list; then
237 for image in $(glance image-list | grep -e $IMAGE_NAME | awk '{print $2}'); do
238 echo "clean up image $image"
239 glance image-delete $image || true
243 if nova keypair-list; then
244 for key in $(nova keypair-list | grep -e $KEY_NAME | awk '{print $2}'); do
245 echo "clean up key $key"
246 nova keypair-delete $key || true
250 if nova flavor-list; then
251 for flavor in $(nova flavor-list | grep -e $FLAVOR_NAME | awk '{print $2}'); do
252 echo "clean up flavor $flavor"
253 nova flavor-delete $flavor || true
257 echo "Bottlenecks cleanup end $(date)"
260 bottlenecks_load_bottlenecks_image()
262 echo "Bottlenecks load image start $(date)"
264 curl --connect-timeout 10 -o /tmp/bottlenecks-trusty-server.img $IMAGE_URL -v
266 result=$(glance image-create \
268 --disk-format qcow2 \
269 --container-format bare \
270 --file /tmp/bottlenecks-trusty-server.img)
273 rm -rf /tmp/bottlenecks-trusty-server.img
275 IMAGE_ID_BOTTLENECKS=$(echo "$result" | grep " id " | awk '{print $(NF-1)}')
276 if [ -z "$IMAGE_ID_BOTTLENECKS" ]; then
277 echo 'failed to upload bottlenecks image to openstack'
281 echo "bottlenecks image end id: $IMAGE_ID_BOTTLENECKS $(date)"
286 echo "main start $(date)"
288 : ${BOTTLENECKS_DEBUG:='True'}
289 : ${BOTTLENECKS_REPO:='https://gerrit.opnfv.org/gerrit/bottlenecks'}
290 : ${BOTTLENECKS_REPO_DIR:='/tmp/opnfvrepo/bottlenecks'}
291 : ${BOTTLENECKS_BRANCH:='master'} # branch, tag, sha1 or refspec
292 : ${RELENG_REPO:='https://gerrit.opnfv.org/gerrit/releng'}
293 : ${RELENG_REPO_DIR:='/tmp/opnfvrepo/releng'}
294 : ${RELENG_BRANCH:='master'} # branch, tag, sha1 or refspec
295 : ${IMAGE_NAME:='bottlenecks-trusty-server'}
296 KEY_PATH=$BOTTLENECKS_REPO_DIR/utils/infra_setup/bottlenecks_key
297 HOT_PATH=$BOTTLENECKS_REPO_DIR/utils/infra_setup/heat_template
298 : ${KEY_NAME:='bottlenecks-key'}
299 : ${FLAVOR_NAME:='bottlenecks-flavor'}
300 : ${TEMPLATE_NAME:='bottlenecks_rubbos_hot.yaml'}
301 ssh_args="-o StrictHostKeyChecking=no -o BatchMode=yes -i $KEY_PATH/bottlenecks_key"
302 : ${EXTERNAL_NET:='net04_ext'}
303 : ${PACKAGE_URL:='http://artifacts.opnfv.org/bottlenecks'}
304 : ${NODE_NAME:='opnfv-jump-2'}
305 : ${INSTALLER_TYPE:='fuel'}
306 : ${INSTALLER_IP:='10.20.0.2'}
307 # TODO fix for dashboard
308 : ${BOTTLENECKS_VERSION:='master'}
309 : ${BOTTLENECKS_DB_TARGET:='213.77.62.197'}
310 IMAGE_URL=${PACKAGE_URL}/rubbos/bottlenecks-trusty-server.img
312 bottlenecks_env_prepare
315 bottlenecks_load_bottlenecks_image
316 bottlenecks_create_instance
317 bottlenecks_check_instance_ok
318 bottlenecks_rubbos_run
320 echo "main end $(date)"