#!/bin/bash
set -ex
GERRIT_REFSPEC_DEBUG=$1
echo "vstf DEBUG test"
echo "vstf workflow goes here"
bottlenecks_env_prepare()
{
if [ -d $BOTTLENECKS_REPO_DIR ]; then
rm -rf ${BOTTLENECKS_REPO_DIR}
fi
mkdir -p ${BOTTLENECKS_REPO_DIR}
git config --global http.sslVerify false
git clone ${BOTTLENECKS_REPO} ${BOTTLENECKS_REPO_DIR}
if [ x"$GERRIT_REFSPEC_DEBUG" != x ]; then
cd ${BOTTLENECKS_REPO_DIR}
git fetch $BOTTLENECKS_REPO $GERRIT_REFSPEC_DEBUG && git checkout FETCH_HEAD
cd -
fi
#obtain installer(openstack) IP, etc, use rubbos's temporarily, later we can amend this
source $BOTTLENECKS_REPO_DIR/rubbos/rubbos_scripts/1-1-1/scripts/env_preparation.sh
}
vstf_cleanup()
{
echo "[INFO]Begin to clean up vstf heat-stack ,glance images and keypairs"
#heat stack-delete bottlenecks
sleep 30
if heat stack-list; then
for stack in $(heat stack-list | grep -e " vstf " | awk '{print $2}'); do
echo "[INFO]clean up stack $stack"
heat stack-delete $stack || true
sleep 30
done
fi
echo "begin to clean the image"
glance image-delete ${MANAGER_IMAGE_NAME};glance image-delete "${TARGET_IMAGE_NAME}";glance image-delete "${TESTER_IMAGE_NAME}"
if glance image-list; then
for image in $(glance image-list | grep -e "${MANAGER_IMAGE_NAME}" | awk '{print $2}'); do
echo "[INFO]clean up image $image"
glance image-delete $image || true
done
for image in $(glance image-list | grep -e "${TARGET_IMAGE_NAME}" | awk '{print $2}'); do
echo "[INFO]clean up image $image"
glance image-delete $image || true
done
for image in $(glance image-list | grep -e "${TESTER_IMAGE_NAME}" | awk '{print $2}'); do
echo "[INFO]clean up image $image"
glance image-delete $image || true
done
fi
if nova keypair-list; then
for key in $(nova keypair-list | grep -e $KEY_NAME | awk '{print $2}'); do
echo "[INFO]clean up key $key"
nova keypair-delete $key || true
done
fi
#check the default flavor m1.large existing
if nova flavor-list; then
flag=`nova flavor-list | grep "m1.large "`
echo "[INFO]the flavor m1.large num is $flag"
fi
#delete image file
rm -rf /tmp/vstf-manager.img;rm -rf /tmp/vstf-agent.img ;rm -rf /tmp/vstf-agent_1.img
return 0
}
vstf_register()
{
echo "[INFO]download vstf images"
#download vstf-manager and vstf-agent image
#curl --connect-timeout 10 -o /tmp/vstf-manager.img $MANAGER_IMAGE_URL -v
#curl --connect-timeout 10 -o /tmp/vstf-agent.img $AGENT_IMAGE_URL -v
curl --connect-timeout 10 -o /tmp/vstf-manager.img $MANAGER_IMAGE_URL -v
curl --connect-timeout 10 -o /tmp/vstf-agent.img $MANAGER_IMAGE_URL -v
curl --connect-timeout 10 -o /tmp/vstf-agent_1.img $MANAGER_IMAGE_URL -v
#echo "begin to test downloading from vstf directory!!!!!!"
#curl --connect-timeout 10 -o /tmp/vstf-test.txt
#echo "begin to cat /tmp/vstf-test.txt vstf directory!!!!!!"
#cat /tmp/vstf-test.txt
#register
echo "[INFO]register vstf manager and agent images"
result=$(glance image-create \
--name $MANAGER_IMAGE_NAME \
--disk-format qcow2 \
--container-format bare \
--file /tmp/vstf-manager.img)
echo "Manager image register result $result."
result=$(glance image-create \
--name $TESTER_IMAGE_NAME \
--disk-format qcow2 \
--container-format bare \
--file /tmp/vstf-agent.img)
echo "Agent image register result $result."
result=$(glance image-create \
--name $TARGET_IMAGE_NAME \
--disk-format qcow2 \
--container-format bare \
--file /tmp/vstf-agent_1.img)
echo "Agent image register result $result."
glance image-list
rm -rf /tmp/vstf-manager.img;rm -rf /tmp/vstf-agent.img ;rm -rf /tmp/vstf-agent_1.img
}
#vstf logic function here
vstf_create_heat_template()
{
echo "create vstf instance using heat template"
echo "upload keypair"
nova keypair-add --pub_key $KEY_PATH/bottlenecks_key.pub $KEY_NAME
nova keypair-list
echo "use heat template to create stack"
cd ${HOT_PATH}
heat stack-create vstf -f ${TEMPLATE_NAME}
}
wait_heat_stack_complete()
{
retry=0
while true
do
status=$(heat stack-list | grep vstf | awk '{print $6}')
if [ x$status = x"CREATE_COMPLETE" ]; then
echo "vstf stacke create complete"
heat stack-show vstf
nova list | grep vstf-
break;
elif [ x$status = x"CREATE_FAILED" ]; then
echo "bottlenecks stacke create failed !!!"
heat stack-show vstf
exit 1
fi
if [ "$BOTTLENECKS_DEBUG" == "True" ]; then
heat stack-show vstf
nova list | grep vstf-
for i in $(nova list | grep "vstf-" | grep ERROR | awk '{print $2}')
do
nova show $i
done
fi
sleep 1
let retry+=1
if [[ $retry -ge $1 ]];then
echo "Heat vstf stack create timeout, status $status !!!"
exit 1
fi
done
}
vstf_check_instance_ok()
{
wait_heat_stack_complete 120
return 0
}
vstf_launch()
{
cd ${HOT_PATH}
bash -x ./launch_vstf.sh
}
vstf_test()
{
cd ${HOT_PATH}
bash -x ./vstf_test.sh
}
main()
{
echo "bottlenecks vstf: create instances with heat template"
BOTTLENECKS_REPO=https://gerrit.opnfv.org/gerrit/bottlenecks
BOTTLENECKS_REPO_DIR=/tmp/opnfvrepo_vstf/bottlenecks
#vstf parameter here
MANAGER_IMAGE_URL=http://artifacts.opnfv.org/bottlenecks/vstf-manager-new.img
AGENT_IMAGE_URL=http://artifacts.opnfv.org/bottlenecks/vstf-agent-new.img
#MANAGER_IMAGE_URL=http://artifacts.opnfv.org/bottlenecks/rubbos/bottlenecks-trusty-server.img
#AGENT_IMAGE_URL=http://artifacts.opnfv.org/bottlenecks/rubbos/bottlenecks-trusty-server.img
MANAGER_IMAGE_NAME="vstf-manager"
TESTER_IMAGE_NAME="vstf-tester"
TARGET_IMAGE_NAME="vstf-target"
KEY_PATH=$BOTTLENECKS_REPO_DIR/utils/infra_setup/bottlenecks_key
HOT_PATH=$BOTTLENECKS_REPO_DIR/utils/infra_setup/heat_template/vstf_heat_template
KEY_NAME=vstf-key
#use the default openstack flavor m1.large
FLAVOR_NAME="m1.large"
TEMPLATE_NAME=bottleneck_vstf.yaml
PUBLIC_NET_NAME=net04_ext
#load adminrc
bottlenecks_env_prepare
#vstf function here
vstf_cleanup
vstf_register
vstf_create_heat_template
vstf_check_instance_ok
heat stack-list
nova list
sleep 100
vstf_launch
sleep 30
vstf_test
sleep 10
echo "[INFO]bottleneck vstf testsuite done ,results in the directory ${HOT_PATH}/result"
echo "[INFO]Begin to clean up the vstf heat-stack and image"
vstf_cleanup
sleep 30
heat stack-list
nova list
}
main
set +ex