diff options
Diffstat (limited to 'utils/infra_setup/heat_template/HOT_create_instance.sh')
-rwxr-xr-x | utils/infra_setup/heat_template/HOT_create_instance.sh | 243 |
1 files changed, 147 insertions, 96 deletions
diff --git a/utils/infra_setup/heat_template/HOT_create_instance.sh b/utils/infra_setup/heat_template/HOT_create_instance.sh index 9d80022d..8ca54b06 100755 --- a/utils/infra_setup/heat_template/HOT_create_instance.sh +++ b/utils/infra_setup/heat_template/HOT_create_instance.sh @@ -4,132 +4,183 @@ set -ex bottlenecks_env_prepare() { - if [ -d $BOTTLENECKS_REPO_DIR ]; then - rm -rf ${BOTTLENECKS_REPO_DIR} - fi + 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} + mkdir -p ${BOTTLENECKS_REPO_DIR} + git config --global http.sslVerify false + git clone ${BOTTLENECKS_REPO} ${BOTTLENECKS_REPO_DIR} - source $BOTTLENECKS_REPO_DIR/rubbos/rubbos_scripts/1-1-1/scripts/env_preparation.sh + source $BOTTLENECKS_REPO_DIR/rubbos/rubbos_scripts/1-1-1/scripts/env_preparation.sh + chmod 600 $KEY_PATH/bottlenecks_key } -bottlenecks_create_instance() -{ - echo "create bottlenecks instance using heat template" - - echo "upload keypair" - nova keypair-add --pub_key $KEY_PATH/bottlenecks_key.pub $KEY_NAME - #need FIX, only upload the public key? should be keypair - - echo "use heat template to create stack" - cd $HOT_PATH - heat stack-create bottlenecks -f ${TEMPLATE_NAME} -P "image=$IMAGE_NAME;key=$KEY_NAME;public_network=$PUBLIC_NET_NAME" - sleep 60 - heat stack-list - heat stack-show bottlenecks - nova list - heat stack-delete bottlenecks - - #need FIX, use stack to create 9 VMs +wait_heat_stack_complete() { + retry=0 + while true + do + status=$(heat stack-list | grep bottlenecks | awk '{print $6}') + if [ x$status = x"CREATE_COMPLETE" ]; then + echo "bottlenecks stacke create complete" + heat stack-show bottlenecks + break; + fi + echo "bottlenecks stack status $status" + sleep 1 + let retry+=1 + if [[ $retry -ge $1 ]];then + echo "Heat stack create timeout!!!" + exit 1 + fi + done } -bottlenecks_cleanup() -{ - echo "clean up bottlenecks images and keys" - - if glance image-list; then - for image in $(glance image-list | grep -e $IMAGE_NAME | awk '{print $2}'); do - echo "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 "clean up key $key" - nova keypair-delete || true - done - fi +wait_rubbos_control_ok() { + control_ip=$(nova list | grep rubbos_control | awk '{print $13}') + + retry=0 + until timeout 1s ssh $ssh_args ec2-user@$control_ip "exit" >/dev/null 2>&1 + do + echo "retry connect rubbos control $retry" + sleep 1 + let retry+=1 + if [[ $retry -ge $1 ]];then + echo "rubbos control start timeout !!!" + exit 1 + fi + done + ssh $ssh_args ec2-user@$control_ip "uname -a" } -bottlenecks_build_image() +bottlenecks_check_instance_ok() { - echo "build bottlenecks image" + echo "check instance" - #need FIX + wait_heat_stack_complete 120 + wait_rubbos_control_ok 300 + nova list | grep rubbos_ } -bottlenecks_load_cirros_image() +bottlenecks_create_instance() { - echo "load bottlenecks cirros image" + echo "create bottlenecks instance using heat template" - wget http://download.cirros-cloud.net/0.3.3/cirros-0.3.3-x86_64-disk.img -O /tmp/cirros.img + echo "upload keypair" + nova keypair-add --pub_key $KEY_PATH/bottlenecks_key.pub $KEY_NAME - result=$(glance image-create \ - --name cirros-0.3.3 \ - --disk-format qcow2 \ - --container-format bare \ - --file /tmp/cirros.img) - echo "$result" + echo "create flavor" + nova flavor-create $FLAVOR_NAME 200 2048 10 1 - rm -rf /tmp/cirros.img + echo "use heat template to create stack" + cd $HOT_PATH + heat stack-create bottlenecks -f ${TEMPLATE_NAME} \ + -P "image=$IMAGE_NAME;key_name=$KEY_NAME;public_net=$PUBLIC_NET_NAME;flavor=$FLAVOR_NAME" +} - IMAGE_ID_CIRROS=$(echo "$result" | grep " id " | awk '{print $(NF-1)}') - if [ -z "$IMAGE_ID_CIRROS" ]; then - echo 'failed to upload cirros image to openstack' - exit 1 - fi +bottlenecks_rubbos_run() +{ + echo "Run Rubbos" + control_ip=$(nova list | grep rubbos_control | awk '{print $13}') + for i in rubbos_benchmark rubbos_client1 rubbos_client2 rubbos_client3 \ + rubbos_client4 rubbos_control rubbos_httpd rubbos_mysql1 \ + rubbos_tomcat1 + do + ip=$(nova list | grep $i | awk '{print $12}' | awk -F [=,] '{print $2}') + echo "$i=$ip" >> $BOTTLENECKS_REPO_DIR/utils/infra_setup/vm_dev_setup/hosts.conf + done + + scp $ssh_args -r \ + $BOTTLENECKS_REPO_DIR/utils/infra_setup/vm_dev_setup \ + ec2-user@$control_ip:/tmp + ssh $ssh_args \ + ec2-user@$control_ip "bash /tmp/vm_dev_setup/setup_env.sh" + + rm -rf $BOTTLENECKS_REPO_DIR/utils/infra_setup/vm_dev_setup/hosts.conf +} - echo "cirros image id: $IMAGE_ID_CIRROS" +bottlenecks_cleanup() +{ + echo "clean up bottlenecks images and keys" + + if heat stack-list; then + for stack in $(heat stack-list | grep -e bottlenecks | awk '{print $2}'); do + echo "clean up stack $stack" + heat stack-delete $stack || true + sleep 30 + done + fi + + if glance image-list; then + for image in $(glance image-list | grep -e $IMAGE_NAME | awk '{print $2}'); do + echo "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 "clean up key $key" + nova keypair-delete $key || true + done + fi + + if nova flavor-list; then + for flavor in $(nova flavor-list | grep -e $FLAVOR_NAME | awk '{print $2}'); do + echo "clean up flavor $flavor" + nova flavor-delete $flavor || true + done + fi } -bottlenecks_load_image() +bottlenecks_load_bottlenecks_image() { - echo "load bottlenecks image" + echo "load bottlenecks image" - result=$(glance --os-image-api-version 1 image-create \ - --name $IMAGE_NAME \ - --is-public true --disk-format qcow2 \ - --container-format bare \ - --file $IMAGE_FILE_NAME) - echo "$result" + curl --connect-timeout 10 -o /tmp/bottlenecks-trusty-server.img $IMAGE_URL -v - GLANCE_IMAGE_ID=$(echo "$result" | grep " id " | awk '{print $(NF-1)}') + result=$(glance image-create \ + --name $IMAGE_NAME \ + --disk-format qcow2 \ + --container-format bare \ + --file /tmp/bottlenecks-trusty-server.img) + echo "$result" - if [ -z "$GLANCE_IMAGE_ID" ]; then - echo 'add image to glance failed' - exit 1 - fi + rm -rf /tmp/bottlenecks-trusty-server.img - sudo rm -f $IMAGE_FILE_NAME + IMAGE_ID_BOTTLENECKS=$(echo "$result" | grep " id " | awk '{print $(NF-1)}') + if [ -z "$IMAGE_ID_BOTTLENECKS" ]; then + echo 'failed to upload bottlenecks image to openstack' + exit 1 + fi - echo "add glance image completed: $GLANCE_IMAGE_ID" + echo "bottlenecks image id: $IMAGE_ID_BOTTLENECKS" } main() { - echo "create instances with heat template" - - BOTTLENECKS_REPO=https://gerrit.opnfv.org/gerrit/bottlenecks - BOTTLENECKS_REPO_DIR=/tmp/opnfvrepo/bottlenecks - #IMAGE_URL=http://205.177.226.235:9999 - IMAGE_NAME=cirros-0.3.3 - #need FIX, need a script to transfer the image from the url to be the installer images - KEY_PATH=$BOTTLENECKS_REPO_DIR/utils/infra_setup/bottlenecks_key - HOT_PATH=$BOTTLENECKS_REPO_DIR/utils/infra_setup/heat_template - KEY_NAME=bottlenecks_key - TEMPLATE_NAME=bottlenecks_template1.yaml - PUBLIC_NET_NAME=net04_ext - #need FIX - #IMAGE_FILE_NAME="" - - bottlenecks_env_prepare - bottlenecks_cleanup - #bottlenecks_build_image - bottlenecks_load_cirros_image - bottlenecks_create_instance + echo "create instances with heat template" + + BOTTLENECKS_REPO=https://gerrit.opnfv.org/gerrit/bottlenecks + BOTTLENECKS_REPO_DIR=/tmp/opnfvrepo/bottlenecks + #IMAGE_URL=http://artifacts.opnfv.org/bottlenecks/rubbos/bottlenecks-trusty-server.img + IMAGE_URL=https://cloud-images.ubuntu.com/trusty/current/trusty-server-cloudimg-amd64-disk1.img + IMAGE_NAME=bottlenecks-trusty-server + KEY_PATH=$BOTTLENECKS_REPO_DIR/utils/infra_setup/bottlenecks_key + HOT_PATH=$BOTTLENECKS_REPO_DIR/utils/infra_setup/heat_template + KEY_NAME=bottlenecks-key + FLAVOR_NAME=bottlenecks-flavor + TEMPLATE_NAME=bottlenecks_rubbos_hot.yaml + PUBLIC_NET_NAME=net04_ext + ssh_args="-o StrictHostKeyChecking=no -o BatchMode=yes -i $KEY_PATH/bottlenecks_key" + + bottlenecks_env_prepare + bottlenecks_cleanup + bottlenecks_load_bottlenecks_image + bottlenecks_create_instance + bottlenecks_check_instance_ok + bottlenecks_rubbos_run + bottlenecks_cleanup } main |