From fdd18f453853d90811accde5e187db0e114e3f2a Mon Sep 17 00:00:00 2001 From: Bryan Sullivan Date: Wed, 1 Mar 2017 14:31:51 -0800 Subject: Align with vHello_Tacker update for Danube JIRA: MODELS-23 Change-Id: I9dafea969c9333f3890532644055c6ebffd11407 Signed-off-by: Bryan Sullivan --- .../tosca-vnfd-3node-tacker/blueprint.yaml | 124 +++++- tests/vHello_3Node_Tacker.sh | 422 +++++++++++++-------- 2 files changed, 380 insertions(+), 166 deletions(-) mode change 100755 => 100644 tests/blueprints/tosca-vnfd-3node-tacker/blueprint.yaml diff --git a/tests/blueprints/tosca-vnfd-3node-tacker/blueprint.yaml b/tests/blueprints/tosca-vnfd-3node-tacker/blueprint.yaml old mode 100755 new mode 100644 index 2b4bd18..f6198f1 --- a/tests/blueprints/tosca-vnfd-3node-tacker/blueprint.yaml +++ b/tests/blueprints/tosca-vnfd-3node-tacker/blueprint.yaml @@ -9,6 +9,10 @@ topology_template: node_templates: VDU1: type: tosca.nodes.nfv.VDU.Tacker + artifacts: + VNFImage: + type: tosca.artifacts.Deployment.Image.VM + file: https://cloud-images.ubuntu.com/xenial/current/xenial-server-cloudimg-amd64-disk1.img capabilities: nfv_compute: properties: @@ -16,9 +20,58 @@ topology_template: mem_size: 1024 MB disk_size: 4 GB properties: - image: models-xenial-server availability_zone: nova mgmt_driver: noop + config_drive: true + user_data_format: RAW + user_data: | + #!/bin/bash + set -x + mkdir /home/ubuntu + chown -R ubuntu /home/ubuntu + sudo mount /dev/sr0 /mnt/ + mkdir ~/www + mkdir ~/www/html + cat > ~/www/Dockerfile < + + + Hello World! + + + + + Welcome to OPNFV @ $host!
+ +
+

Instance ID fom config drive file /mnt/openstack/latest/meta_data.json>

+
+          $id
+          
+

Server setup completed at $(date)

+
+ + EOM + wget https://git.opnfv.org/cgit/models/plain/tests/blueprints/tosca-vnfd-hello-ves/favicon.ico -O ~/www/html/favicon.ico + sudo apt-get install apt-transport-https ca-certificates + sudo apt-key adv --keyserver hkp://p80.pool.sks-keyservers.net:80 --recv-keys 58118E89F3A912897C070ADBF76221572C52609D + echo "deb https://apt.dockerproject.org/repo ubuntu-xenial main" | sudo tee /etc/apt/sources.list.d/docker.list + sudo apt-get update + sudo apt-get purge lxc-docker + sudo apt-get install -y linux-image-extra-$(uname -r) linux-image-extra-virtual + sudo apt-get install -y docker-engine + sudo docker pull nginx + cd ~/www + sudo docker build -t vhello . + sudo docker run --name vHello -d -p 80:80 vhello config: | param0: key1 param1: key2 @@ -46,6 +99,10 @@ topology_template: VDU2: type: tosca.nodes.nfv.VDU.Tacker + artifacts: + VNFImage: + type: tosca.artifacts.Deployment.Image.VM + file: https://cloud-images.ubuntu.com/xenial/current/xenial-server-cloudimg-amd64-disk1.img capabilities: nfv_compute: properties: @@ -53,9 +110,58 @@ topology_template: mem_size: 1024 MB disk_size: 4 GB properties: - image: models-xenial-server availability_zone: nova mgmt_driver: noop + config_drive: true + user_data_format: RAW + user_data: | + #!/bin/bash + set -x + mkdir /home/ubuntu + chown -R ubuntu /home/ubuntu + sudo mount /dev/sr0 /mnt/ + mkdir ~/www + mkdir ~/www/html + cat > ~/www/Dockerfile < + + + Hello World! + + + + + Welcome to OPNFV @ $host!
+ +
+

Instance ID fom config drive file /mnt/openstack/latest/meta_data.json>

+
+          $id
+          
+

Server setup completed at $(date)

+
+ + EOM + wget https://git.opnfv.org/cgit/models/plain/tests/blueprints/tosca-vnfd-hello-ves/favicon.ico -O ~/www/html/favicon.ico + sudo apt-get install apt-transport-https ca-certificates + sudo apt-key adv --keyserver hkp://p80.pool.sks-keyservers.net:80 --recv-keys 58118E89F3A912897C070ADBF76221572C52609D + echo "deb https://apt.dockerproject.org/repo ubuntu-xenial main" | sudo tee /etc/apt/sources.list.d/docker.list + sudo apt-get update + sudo apt-get purge lxc-docker + sudo apt-get install -y linux-image-extra-$(uname -r) linux-image-extra-virtual + sudo apt-get install -y docker-engine + sudo docker pull nginx + cd ~/www + sudo docker build -t vhello . + sudo docker run --name vHello -d -p 80:80 vhello config: | param0: key1 param1: key2 @@ -83,6 +189,10 @@ topology_template: VDU3: type: tosca.nodes.nfv.VDU.Tacker + artifacts: + VNFImage: + type: tosca.artifacts.Deployment.Image.VM + file: https://cloud-images.ubuntu.com/xenial/current/xenial-server-cloudimg-amd64-disk1.img capabilities: nfv_compute: properties: @@ -90,9 +200,17 @@ topology_template: mem_size: 1024 MB disk_size: 4 GB properties: - image: models-xenial-server availability_zone: nova mgmt_driver: noop + user_data_format: RAW + user_data: | + #!/bin/bash + set -x + echo "1" | sudo tee /proc/sys/net/ipv4/ip_forward + sudo sysctl net.ipv4.ip_forward=1 + sudo iptables -t nat -A PREROUTING -p tcp --dport 80 -m state --state NEW -m statistic --mode nth --every 2 --packet 0 -j DNAT --to-destination :80 + sudo iptables -t nat -A PREROUTING -p tcp --dport 80 -m state --state NEW -m statistic --mode nth --every 2 --packet 0 -j DNAT --to-destination :80 + sudo iptables -t nat -A POSTROUTING -j MASQUERADE config: | param0: key1 param1: key2 diff --git a/tests/vHello_3Node_Tacker.sh b/tests/vHello_3Node_Tacker.sh index ed6ab9a..7d877ff 100644 --- a/tests/vHello_3Node_Tacker.sh +++ b/tests/vHello_3Node_Tacker.sh @@ -1,5 +1,5 @@ #!/bin/bash -# Copyright 2016 AT&T Intellectual Property, Inc +# Copyright 2016-2017 AT&T Intellectual Property, Inc # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -18,36 +18,105 @@ # # Status: this is a work in progress, under test. # +# Use Case Description: A three-node deployment with two simple python web +# servers and a load balancer, connected to two internal networks (private and +# admin), and accessible via a floating IP. Based upon the OpenStack Tacker +# project's "tosca-vnfd-hello-world" blueprint, as extended for testing of more +# Tacker-supported features as of OpenStack Newton. +# +# Prerequisites: +# This test can be run in either an OPNFV environment, or a plain OpenStack +# environment (e.g. Devstack). +# For Devstack running in a VM on the host, you must first enable the host to +# access the VMs running under Devstack: +# 1) In devstack VM: +# $ sudo iptables -t nat -A POSTROUTING -o ens3 -j MASQUERADE +# Sub the primary interface of your devstack VM for ens3, as needed. +# 2) On the host (e.g linux): +# $ sudo route add -net 172.24.0.0/16 gw 192.168.122.112 +# Sub your devstack Public network subnet for 172.24.0.0/16, and +# your devstack VM IP address on the host for 192.168.122.112 +# Also you may need to ensure that nested virtualization is enabled, e.g. in +# virt-manager, enable "Copy host CPU confguraton" for the devstack VM. +# +# For OPNFV-based tests, prerequisites are +# 1) models-joid-001 | models-apex-001 (installation of OPNFV system) +# The test may work, but has not been tested for other OPNFV installers. +# +# Test Steps and Assertions: +# 1) bash vHello_3Node_Tacker.sh setup [branch] +# models-tacker-001 (Tacker installation in a docker container on the jumphost) +# models-nova-001 (Keypair creation) +# 2) bash vHello_3Node_Tacker.sh start +# models-tacker-002 (VNFD creation) +# models-tacker-003 (VNF creation) +# models-tacker-vnfd-001 (config_drive creation) +# models-tacker-vnfd-002 (artifacts creation) +# models-tacker-vnfd-003 (user_data creation) +# models-vhello-001 (vHello VNF creation) +# 3) bash vHello_3Node_Tacker.sh stop +# models-tacker-004 (VNF deletion) +# models-tacker-005 (VNFD deletion) +# models-tacker-vnfd-004 (artifacts deletion) +# 4) bash vHello_Tacker.sh clean +# TODO: add assertions +# +# Post-State: +# After step 1, Tacker is installed and active in a docker container, and the +# test blueprint etc are prepared in a shared virtual folder /opt/tacker. +# After step 2, the VNF is running and verified. +# After step 3, the VNF is deleted and the system returned to step 1 post-state. +# After step 4, the system returned to test pre-state. +# +# Cleanup: bash vHello_Tacker.sh clean +# # How to use: -# $ git clone https://gerrit.opnfv.org/gerrit/ves -# $ cd ves/tests -# $ bash vHello_3Node_Tacker.sh [setup|start|run|stop|clean] -# [monitor|traffic|pause|nic] -# setup: setup test environment -# start: install blueprint and run test -# run: setup test environment and run test -# stop: stop test and uninstall blueprint -# clean: cleanup after test +# $ git clone https://gerrit.opnfv.org/gerrit/models +# $ cd models/tests +# $ bash vHello_3Node_Tacker.sh [setup|run] [] [branch] +# setup: setup test environment +# : location of OpenStack openrc file +# branch: OpenStack branch to install (default: master) +# $ bash vHello_3Node_Tacker.sh [start|stop|clean] +# run: setup test environment and run test +# start: install blueprint and run test +# stop: stop test and uninstall blueprint +# clean: cleanup after test trap 'fail' ERR pass() { echo "$0: $(date) Hooray!" + end=`date +%s` + runtime=$((end-test_start)) + echo "$0: $(date) Test Duration = $runtime seconds" exit 0 } fail() { echo "$0: $(date) Test Failed!" + end=`date +%s` + runtime=$((end-test_start)) + runtime=$((runtime/60)) + echo "$0: $(date) Test Duration = $runtime seconds" exit 1 } +assert() { + if [[ $2 == true ]]; then echo "$0 test assertion passed: $1" + else + echo "$0 test assertion failed: $1" + fail + fi +} + get_floating_net () { network_ids=($(neutron net-list|grep -v "+"|grep -v name|awk '{print $2}')) for id in ${network_ids[@]}; do [[ $(neutron net-show ${id}|grep 'router:external'|grep -i "true") != "" ]] && FLOATING_NETWORK_ID=${id} done if [[ $FLOATING_NETWORK_ID ]]; then - FLOATING_NETWORK_NAME=$(openstack network show $FLOATING_NETWORK_ID | awk "/ name / { print \$4 }") + FLOATING_NETWORK_NAME=$(neutron net-show $FLOATING_NETWORK_ID | awk "/ name / { print \$4 }") else echo "$0: $(date) Floating network not found" exit 1 @@ -57,8 +126,7 @@ get_floating_net () { try () { count=$1 $3 - while [[ $? -eq 1 && $count -gt 0 ]] - do + while [[ $? == 1 && $count > 0 ]]; do sleep $2 let count=$count-1 $3 @@ -67,81 +135,46 @@ try () { } setup () { - echo "$0: $(date) Started" - echo "$0: $(date) Setup temp test folder /tmp/tacker and copy this script there" - mkdir -p /tmp/tacker - chmod 777 /tmp/tacker/ - cp $0 /tmp/tacker/. - chmod 755 /tmp/tacker/*.sh + echo "$0: $(date) Setup temp test folder /opt/tacker and copy this script there" + if [ -d /opt/tacker ]; then sudo rm -rf /opt/tacker; fi + sudo mkdir -p /opt/tacker + sudo chown $USER /opt/tacker + chmod 777 /opt/tacker/ + cp $0 /opt/tacker/. + cp $1 /opt/tacker/admin-openrc.sh + + source /opt/tacker/admin-openrc.sh + chmod 755 /opt/tacker/*.sh echo "$0: $(date) tacker-setup part 1" - wget https://git.opnfv.org/cgit/models/plain/tests/utils/tacker-setup.sh -O /tmp/tacker/tacker-setup.sh - bash /tmp/tacker/tacker-setup.sh tacker-cli init + bash utils/tacker-setup.sh init + if [ $? -eq 1 ]; then fail; fi echo "$0: $(date) tacker-setup part 2" - CONTAINER=$(sudo docker ps -l | awk "/tacker/ { print \$1 }") +# TODO: find a generic way to set extension_drivers = port_security in ml2_conf.ini + # On the neutron service host, update ml2_conf.ini and and restart neutron service + # sed -i -- 's~#extension_drivers =~extension_drivers = port_security~' /etc/neutron/plugins/ml2/ml2_conf.ini + # For devstack, set in local.conf per http://docs.openstack.org/developer/devstack/guides/neutron.html + # Q_ML2_PLUGIN_EXT_DRIVERS=port_security + dist=`grep DISTRIB_ID /etc/*-release | awk -F '=' '{print $2}'` if [ "$dist" == "Ubuntu" ]; then - echo "$0: $(date) JOID workaround for Colorado - enable ML2 port security" - juju set neutron-api enable-ml2-port-security=true + dpkg -l juju + if [[ $? -eq 0 ]]; then + echo "$0: $(date) JOID workaround for Colorado - enable ML2 port security" + juju set neutron-api enable-ml2-port-security=true + fi echo "$0: $(date) Execute tacker-setup.sh in the container" - sudo docker exec -it $CONTAINER /bin/bash /tmp/tacker/tacker-setup.sh tacker-cli setup + sudo docker exec -it tacker /bin/bash /opt/tacker/tacker-setup.sh setup $2 + if [ $? -eq 1 ]; then fail; fi else - echo "$0: $(date) Copy private key to the container (needed for later install steps)" - cp ~/.ssh/id_rsa /tmp/tacker/id_rsa echo "$0: $(date) Execute tacker-setup.sh in the container" - sudo docker exec -i -t $CONTAINER /bin/bash /tmp/tacker/tacker-setup.sh tacker-cli setup - fi - - echo "$0: $(date) reset blueprints folder" - if [[ -d /tmp/tacker/blueprints/tosca-vnfd-3node-tacker ]]; then rm -rf /tmp/tacker/blueprints/tosca-vnfd-3node-tacker; fi - mkdir -p /tmp/tacker/blueprints/tosca-vnfd-3node-tacker - - echo "$0: $(date) copy tosca-vnfd-3node-tacker to blueprints folder" - cp -r blueprints/tosca-vnfd-3node-tacker /tmp/tacker/blueprints - - # Following two steps are in testing still. The guestfish step needs work. - - # echo "$0: $(date) Create Nova key pair" - # mkdir -p ~/.ssh - # nova keypair-delete vHello - # nova keypair-add vHello > /tmp/tacker/vHello.pem - # chmod 600 /tmp/tacker/vHello.pem - # pubkey=$(nova keypair-show vHello | grep "Public key:" | sed -- 's/Public key: //g') - # nova keypair-show vHello | grep "Public key:" | sed -- 's/Public key: //g' >/tmp/tacker/vHello.pub - - echo "$0: $(date) Inject key into xenial server image" - # wget http://cloud-images.ubuntu.com/xenial/current/xenial-server-cloudimg-amd64-disk1.img - # sudo yum install -y libguestfs-tools - # guestfish </home/ubuntu/.ssh/authorized_keys -#$pubkey -#EOM -#exit -#chown -R ubuntu /home/ubuntu -#EOF - - # Using pre-key-injected image for now, vHello.pem as provided in the blueprint - if [ ! -f /tmp/xenial-server-cloudimg-amd64-disk1.img ]; then - wget -O /tmp/xenial-server-cloudimg-amd64-disk1.img http://artifacts.opnfv.org/models/images/xenial-server-cloudimg-amd64-disk1.img + sudo docker exec -i -t tacker /bin/bash /opt/tacker/tacker-setup.sh setup $2 + if [ $? -eq 1 ]; then fail; fi fi - cp blueprints/tosca-vnfd-3node-tacker/vHello.pem /tmp/tacker - chmod 600 /tmp/tacker/vHello.pem - - echo "$0: $(date) setup OpenStack CLI environment" - source /tmp/tacker/admin-openrc.sh - - echo "$0: $(date) Setup image_id" - image_id=$(openstack image list | awk "/ models-xenial-server / { print \$2 }") - if [[ -z "$image_id" ]]; then glance --os-image-api-version 1 image-create --name models-xenial-server --disk-format qcow2 --file /tmp/xenial-server-cloudimg-amd64-disk1.img --container-format bare; fi - echo "$0: $(date) Completed" + assert "models-tacker-001 (Tacker installation in a docker container on the jumphost)" true } say_hello() { @@ -159,104 +192,104 @@ say_hello() { if [[ ! $pass ]]; then fail; fi } +copy_blueprint() { + echo "$0: $(date) reset blueprints folder" + if [[ -d /opt/tacker/blueprints/tosca-vnfd-3node-tacker ]]; then + rm -rf /opt/tacker/blueprints/tosca-vnfd-3node-tacker + fi + + echo "$0: $(date) copy tosca-vnfd-3node-tacker to blueprints folder" + cp -r blueprints/tosca-vnfd-3node-tacker /opt/tacker/blueprints + cp $0 /opt/tacker/. +} + + start() { - echo "$0: $(date) Started" echo "$0: $(date) setup OpenStack CLI environment" - source /tmp/tacker/admin-openrc.sh + source /opt/tacker/admin-openrc.sh + + vdus="VDU1 VDU2 VDU3" + vdui="1 2 3" + declare -a vdu_id=() + declare -a vdu_ip=() + declare -a vdu_url=() + + # Setup for workarounds + echo "$0: $(date) allocate floating IPs" + get_floating_net + for i in $vdui; do + vdu_ip[$i]=$(nova floating-ip-create $FLOATING_NETWORK_NAME | awk "/public/ { print \$4 }") + done + + echo "$0: $(date) Inject web server floating IPs into LB code in blueprint" + sed -i -- "s//$vdu_ip[1]/" /opt/tacker/blueprints/tosca-vnfd-3node-tacker/blueprint.yaml + sed -i -- "s//$vdu_ip[2]/" /opt/tacker/blueprints/tosca-vnfd-3node-tacker/blueprint.yaml + # End setup for workarounds echo "$0: $(date) create VNFD" - cd /tmp/tacker/blueprints/tosca-vnfd-3node-tacker - tacker vnfd-create --vnfd-file blueprint.yaml --name hello-3node - if [ $? -eq 1 ]; then fail; fi + cd /opt/tacker/blueprints/tosca-vnfd-3node-tacker + # newton: NAME (was "--name") is now a positional parameter + tacker vnfd-create --vnfd-file blueprint.yaml hello-3node + if [[ $? -eq 0 ]]; then + assert "models-tacker-002 (VNFD creation)" true + else + assert "models-tacker-002 (VNFD creation)" false + fi echo "$0: $(date) create VNF" - tacker vnf-create --vnfd-name hello-3node --name hello-3node + # newton: NAME (was "--name") is now a positional parameter + tacker vnf-create --vnfd-name hello-3node hello-3node if [ $? -eq 1 ]; then fail; fi echo "$0: $(date) wait for hello-3node to go ACTIVE" active="" - while [[ -z $active ]] + count=48 + while [[ -z $active && $count -gt 0 ]] do active=$(tacker vnf-show hello-3node | grep ACTIVE) if [ "$(tacker vnf-show hello-3node | grep -c ERROR)" == "1" ]; then echo "$0: $(date) hello-3node VNF creation failed with state ERROR" fail fi - sleep 10 + let count=$count-1 + sleep 30 + echo "$0: $(date) wait for hello-3node to go ACTIVE" done + if [[ $count == 0 ]]; then + echo "$0: $(date) hello-world-tacker VNF creation failed - timed out" + assert "models-tacker-002 (VNF creation)" false + fi + assert "models-tacker-002 (VNF creation)" true + # Workarounds echo "$0: $(date) directly set port security on ports (bug/unsupported in Mitaka Tacker?)" - vdus="VDU1 VDU2 VDU3" - vdui="1 2 3" - declare -a vdu_id=() - declare -a vdu_ip=() - declare -a vdu_url=() - HEAT_ID=$(tacker vnf-show hello-3node | awk "/instance_id/ { print \$4 }") - vdu_id[1]=$(openstack stack resource list $HEAT_ID | awk "/VDU1 / { print \$4 }") - vdu_id[2]=$(openstack stack resource list $HEAT_ID | awk "/VDU2 / { print \$4 }") - vdu_id[3]=$(openstack stack resource list $HEAT_ID | awk "/VDU3 / { print \$4 }") - -cat >/tmp/grep < /dev/null 2>&1 &" - - echo "$0: $(date) start vHello webserver in VDU2 at ${vdu_ip[2]}" - ssh -i /tmp/tacker/vHello.pem -x -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no \ - ubuntu@${vdu_ip[2]} "nohup bash /home/ubuntu/start.sh webserver > /dev/null 2>&1 &" - - echo "$0: $(date) start LB in VDU3 at ${vdu_ip[3]}" - ssh -i /tmp/tacker/vHello.pem -x -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no \ - ubuntu@${vdu_ip[3]} "nohup bash /home/ubuntu/start.sh lb ${vdu_ip[1]} ${vdu_ip[2]} > /dev/null 2>&1 &" + vdu_url[3]="http://${vdu_ip[2]}" echo "$0: $(date) verify vHello server is running at each web server and via the LB" apt-get install -y curl @@ -267,19 +300,61 @@ EOF stop() { echo "$0: $(date) setup OpenStack CLI environment" - source /tmp/tacker/admin-openrc.sh + source /opt/tacker/admin-openrc.sh echo "$0: $(date) uninstall vHello blueprint via CLI" vdus="VDU1 VDU2 VDU3" for vdu in $vdus; do get_vdu_info $vdu - echo "$0: $(date) disassociate floating ip for $vdu" - nova floating-ip-disassociate $id $ip + if [[ ! -z $id ]]; then + echo "$0: $(date) disassociate floating ip for $vdu" + nova floating-ip-disassociate $id $ip + fi + echo "$0: $(date) No instance for $vdu found" done - vid=($(tacker vnf-list|grep hello-3node|awk '{print $2}')); for id in ${vid[@]}; do tacker vnf-delete ${id}; done - vid=($(tacker vnfd-list|grep hello-3node|awk '{print $2}')); for id in ${vid[@]}; do tacker vnfd-delete ${id}; done + + if [[ "$(tacker vnf-list|grep hello-3node|awk '{print $2}')" != '' ]]; then + echo "$0: $(date) uninstall vHello blueprint via CLI" + try 12 10 "tacker vnf-delete hello-3node" + # It can take some time to delete a VNF - thus wait 2 minutes + count=12 + while [[ $count > 0 && "$(tacker vnf-list|grep hello-3node|awk '{print $2}')" != '' ]]; do + sleep 10 + let count=$count-1 + done + if [[ "$(tacker vnf-list|grep hello-3node|awk '{print $2}')" == '' ]]; then + assert "models-tacker-004 (VNF deletion)" true + else + assert "models-tacker-004 (VNF deletion)" false + fi + else echo "$0: $(date) No hello-3node VNF instance found" + fi + + # It can take some time to delete a VNFD - thus wait 2 minutes + if [[ "$(tacker vnfd-list|grep hello-3node|awk '{print $2}')" != '' ]]; then + try 12 10 "tacker vnfd-delete hello-3node" + if [[ "$(tacker vnfd-list|grep hello-3node|awk '{print $2}')" == '' ]]; then + assert "models-tacker-005 (VNFD deletion)" true + else + assert "models-tacker-005 (VNFD deletion)" false + fi + else echo "$0: $(date) No hello-3node VNFD found" + fi + + if [[ ! -z $(openstack image list|grep VNFImage|awk '{print $2}') ]]; then + iid=($(openstack image list|grep VNFImage|awk '{print $2}')); for id in ${iid[@]}; do openstack image delete ${id}; done + if [[ "$(openstack image list|grep VNFImage|awk '{print $2}')" == '' ]]; then + assert "models-tacker-vnfd-004 (artifacts deletion)" true + else + assert "models-tacker-vnfd-004 (artifacts deletion)" false + fi + else echo "$0: $(date) No VNFImage found" + fi + + # Cleanup for workarounds + fip=($(neutron floatingip-list|grep -v "+"|grep -v id|awk '{print $2}')); for id in ${fip[@]}; do neutron floatingip-delete ${id}; done sg=($(openstack security group list|grep vHello|awk '{print $2}')) - for id in ${sg[@]}; do try 10 5 "openstack security group delete ${id}"; done + for id in ${sg[@]}; do try 5 5 "openstack security group delete ${id}"; done } # @@ -287,9 +362,6 @@ stop() { # get_vdu_info () { - source /tmp/tacker/admin-openrc.sh - - echo "$0: $(date) find VM IP for $1" id=$(openstack server list | awk "/$1/ { print \$2 }") ip=$(openstack server list | awk "/$1/ { print \$10 }") } @@ -297,40 +369,64 @@ get_vdu_info () { forward_to_container () { echo "$0: $(date) pass $1 command to this script in the tacker container" CONTAINER=$(sudo docker ps -a | awk "/tacker/ { print \$1 }") - sudo docker exec $CONTAINER /bin/bash /tmp/tacker/vHello_3Node_Tacker.sh $1 $1 + sudo docker exec $CONTAINER /bin/bash /opt/tacker/vHello_3Node_Tacker.sh $1 if [ $? -eq 1 ]; then fail; fi } +test_start=`date +%s` dist=`grep DISTRIB_ID /etc/*-release | awk -F '=' '{print $2}'` + case "$1" in setup) - setup + setup $2 $3 + if [ $? -eq 1 ]; then fail; fi pass ;; run) - setup + setup $2 $3 + copy_blueprint forward_to_container start + if [ $? -eq 1 ]; then fail; fi + pass + ;; + start) + if [[ -f /.dockerenv ]]; then + start + else + copy_blueprint + forward_to_container start + fi + if [ $? -eq 1 ]; then fail; fi pass ;; - start|stop) - if [[ $# -eq 1 ]]; then forward_to_container $1 + stop) + if [[ -f /.dockerenv ]]; then + stop else - # running inside the tacker container, ready to go - $1 + forward_to_container stop fi + if [ $? -eq 1 ]; then fail; fi pass ;; clean) echo "$0: $(date) Uninstall Tacker and test environment" - bash /tmp/tacker/tacker-setup.sh $1 clean + forward_to_container stop + sudo docker exec -it tacker /bin/bash /opt/tacker/tacker-setup.sh clean + sudo docker stop tacker + sudo docker rm -v tacker + sudo rm -rf /opt/tacker pass ;; *) - echo "usage: bash vHello_3Node_Tacker.sh [setup|start|run|clean]" - echo "setup: setup test environment" - echo "start: install blueprint and run test" - echo "run: setup test environment and run test" - echo "stop: stop test and uninstall blueprint" - echo "clean: cleanup after test" + echo "usage: " + echo "$ bash vHello_3Node_Tacker.sh [setup|run] [] [branch]" + echo " setup: setup test environment" + echo " : location of OpenStack openrc file" + echo " branch: OpenStack branch to install (default: master)" + echo "$ bash vHello_3Node_Tacker.sh [start|stop|clean]" + echo " run: setup test environment and run test" + echo " start: install blueprint and run test" + echo " stop: stop test and uninstall blueprint" + echo " clean: cleanup after test" fail esac -- cgit 1.2.3-korg