summaryrefslogtreecommitdiffstats
path: root/tests/vHello_Tacker.sh
diff options
context:
space:
mode:
Diffstat (limited to 'tests/vHello_Tacker.sh')
-rw-r--r--tests/vHello_Tacker.sh270
1 files changed, 162 insertions, 108 deletions
diff --git a/tests/vHello_Tacker.sh b/tests/vHello_Tacker.sh
index ef343b4..1068763 100644
--- a/tests/vHello_Tacker.sh
+++ b/tests/vHello_Tacker.sh
@@ -69,35 +69,47 @@
#
# Cleanup: bash vHello_Tacker.sh clean
#
-# How to use:
-# $ git clone https://gerrit.opnfv.org/gerrit/models
-# $ cd models/tests
-# $ bash vHello_Tacker.sh [setup|run] [<openrc>] [branch]
-# setup: setup test environment
-# <openrc>: location of OpenStack openrc file
-# branch: OpenStack branch to install (default: master)
-# $ bash vHello_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
+#.How to use:
+#. $ git clone https://gerrit.opnfv.org/gerrit/models
+#. $ cd models/tests
+#. $ bash vHello_Tacker.sh <setup|run> <openrc> [branch]
+#. setup: setup test environment
+#. openrc: location of OpenStack openrc file
+#. branch: OpenStack branch to install (default: master)
+#. $ source ~/venv/bin/activate
+#. This is needed to use the OpenStack clients in the following steps.
+#. $ bash vHello_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
+function ignore() {
+ log "last command failed, but continuing anyway (fail on err is disabled...)"
+}
+
+function log() {
+ f=$(caller 0 | awk '{print $2}')
+ l=$(caller 0 | awk '{print $1}')
+ echo "$f:$l ($(date)) $1"
+}
+
pass() {
- echo "$0: $(date) Hooray!"
+ log "Hooray!"
end=`date +%s`
runtime=$((end-test_start))
- echo "$0: $(date) Test Duration = $runtime seconds"
+ log "Test Duration = $runtime seconds"
exit 0
}
fail() {
- echo "$0: $(date) Test Failed!"
+ log "Test Failed!"
end=`date +%s`
runtime=$((end-test_start))
runtime=$((runtime/60))
- echo "$0: $(date) Test Duration = $runtime seconds"
+ log "Test Duration = $runtime seconds"
exit 1
}
@@ -117,7 +129,21 @@ get_floating_net () {
if [[ $FLOATING_NETWORK_ID ]]; then
FLOATING_NETWORK_NAME=$(neutron net-show $FLOATING_NETWORK_ID | awk "/ name / { print \$4 }")
else
- echo "$0: $(date) Floating network not found"
+ log "Floating network not found"
+ exit 1
+ fi
+}
+
+function get_external_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") != "" ]] && ext_net_id=${id}
+ done
+ if [[ $ext_net_id ]]; then
+ EXTERNAL_NETWORK_NAME=$(neutron net-show $ext_net_id | awk "/ name / { print \$4 }")
+ EXTERNAL_SUBNET_ID=$(neutron net-show $EXTERNAL_NETWORK_NAME | awk "/ subnets / { print \$4 }")
+ else
+ log "External network not found"
exit 1
fi
}
@@ -130,62 +156,95 @@ try () {
let count=$count-1
$3
done
- if [[ $count -eq 0 ]]; then echo "$0: $(date) Command \"$3\" was not successful after $1 tries"; fi
+ if [[ $count -eq 0 ]]; then log "Command \"$3\" was not successful after $1 tries"; fi
}
setup () {
trap 'fail' ERR
- echo "$0: $(date) Setup shared test folder /opt/tacker"
- 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/
-
- echo "$0: $(date) copy test script and openrc to /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"
- bash utils/tacker-setup.sh init
+ log "run tacker-setup.sh"
+ bash utils/tacker-setup.sh setup $openrc $branch
if [ $? -eq 1 ]; then fail; fi
+ assert "models-tacker-001 (Tacker installation in a docker container on the jumphost)" true
- echo "$0: $(date) tacker-setup part 2"
-# 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
+ log "Install OpenStack clients"
+ source ../tools/setup_osc.sh $branch
+ source ~/venv/bin/activate
+
+ log "Install python-tackerclient"
+ cd ~/venv/git
+ git clone https://github.com/openstack/python-tackerclient.git
+ cd python-tackerclient
+ pip install .
+ cd ..
+
+ log "Setup OpenStack CLI environment"
+ source $openrc
+
+ log "Create image models-xenial-server"
+ image_id=$(openstack image list | awk "/ models-xenial-server / { print \$2 }")
+ if [[ -z "$image_id" ]]; then
+ wget http://cloud-images.ubuntu.com/releases/xenial/release/ubuntu-16.04-server-cloudimg-amd64-disk1.img \
+ -O ~/ubuntu-16.04-server-cloudimg-amd64-disk1.img
+ glance image-create --name models-xenial-server --disk-format qcow2 --container-format bare
+ image_id=$(openstack image list | awk "/ models-xenial-server / { print \$2 }")
+ glance image-upload --file ~/ubuntu-16.04-server-cloudimg-amd64-disk1.img $image_id
+ fi
+
+ log "Create management network"
+ if [ $(neutron net-list | awk "/ vnf_mgmt / { print \$2 }") ]; then
+ log "vnf_mgmt network exists"
+ else
+ neutron net-create vnf_mgmt
+ log "Create management subnet"
+ neutron subnet-create vnf_mgmt 192.168.200.0/24 --name vnf_mgmt --gateway 192.168.200.1 --enable-dhcp --allocation-pool start=192.168.200.2,end=192.168.200.254 --dns-nameserver 8.8.8.8
+ fi
+ log "Create router for vnf_mgmt network"
+ if [ $(neutron router-list | awk "/ vnf_mgmt / { print \$2 }") ]; then
+ log "vnf_mgmt router exists"
+ else
+ neutron router-create vnf_mgmt_router
+ log "Create router gateway for vnf_mgmt network"
+ get_external_net
+ neutron router-gateway-set vnf_mgmt_router $EXTERNAL_NETWORK_NAME
+ log "Add router interface for vnf_mgmt network"
+ neutron router-interface-add vnf_mgmt_router subnet=vnf_mgmt
+ fi
- dist=`grep DISTRIB_ID /etc/*-release | awk -F '=' '{print $2}'`
- if [ "$dist" == "Ubuntu" ]; then
- echo "$0: $(date) Execute tacker-setup.sh in the container"
- sudo docker exec -it tacker /bin/bash /opt/tacker/tacker-setup.sh setup $2
- if [ $? -eq 1 ]; then fail; fi
+ echo "Create private network"
+ if [ $(neutron net-list | awk "/ vnf_private / { print \$2 }") ]; then
+ log "vnf_private network exists"
else
- echo "$0: $(date) Execute tacker-setup.sh in the container"
- sudo docker exec -i -t tacker /bin/bash /opt/tacker/tacker-setup.sh setup $2
- if [ $? -eq 1 ]; then fail; fi
+ neutron net-create vnf_private
+ log "Create private subnet"
+ neutron subnet-create vnf_private 192.168.201.0/24 --name vnf_private --gateway 192.168.201.1 --enable-dhcp --allocation-pool start=192.168.201.2,end=192.168.201.254 --dns-nameserver 8.8.8.8
fi
- assert "models-tacker-001 (Tacker installation in a docker container on the jumphost)" true
+ log "Create router for vnf_private network"
+ if [ $(neutron router-list | awk "/ vnf_private / { print \$2 }") ]; then
+ log "vnf_private router exists"
+ else
+ neutron router-create vnf_private_router
+ log "Create router gateway for vnf_private network"
+ get_external_net
+ neutron router-gateway-set vnf_private_router $EXTERNAL_NETWORK_NAME
+ log "Add router interface for vnf_private network"
+ neutron router-interface-add vnf_private_router subnet=vnf_private
+ fi
}
copy_blueprint() {
- echo "$0: $(date) copy test script to /opt/tacker"
+ log "copy test script to /opt/tacker"
cp $0 /opt/tacker/.
- echo "$0: $(date) reset blueprints folder"
+ log "reset blueprints folder"
if [[ -d /opt/tacker/blueprints/tosca-vnfd-hello-world-tacker ]]; then
rm -rf /opt/tacker/blueprints/tosca-vnfd-hello-world-tacker
fi
mkdir -p /opt/tacker/blueprints/tosca-vnfd-hello-world-tacker
- echo "$0: $(date) copy tosca-vnfd-hello-world-tacker to blueprints folder"
+ log "copy tosca-vnfd-hello-world-tacker to blueprints folder"
cp -r blueprints/tosca-vnfd-hello-world-tacker /opt/tacker/blueprints
}
@@ -193,24 +252,24 @@ start() {
# Disable trap for now, need to test to ensure premature fail does not occur
# trap 'fail' ERR
- echo "$0: $(date) setup OpenStack CLI environment"
+ log "setup OpenStack CLI environment"
source /opt/tacker/admin-openrc.sh
- echo "$0: $(date) Create Nova key pair"
+ log "Create Nova key pair"
if [[ -f /opt/tacker/vHello ]]; then rm /opt/tacker/vHello; fi
ssh-keygen -t rsa -N "" -f /opt/tacker/vHello -C ubuntu@vHello
chmod 600 /opt/tacker/vHello
openstack keypair create --public-key /opt/tacker/vHello.pub vHello
assert "models-nova-001 (Keypair creation)" true
- echo "$0: $(date) Inject public key into blueprint"
+ log "Inject public key into blueprint"
pubkey=$(cat /opt/tacker/vHello.pub)
sed -i -- "s~<pubkey>~$pubkey~" /opt/tacker/blueprints/tosca-vnfd-hello-world-tacker/blueprint.yaml
- echo "$0: $(date) Get external network for Floating IP allocations"
+ log "Get external network for Floating IP allocations"
get_floating_net
- echo "$0: $(date) create VNFD"
+ log "create VNFD"
cd /opt/tacker/blueprints/tosca-vnfd-hello-world-tacker
# newton: NAME (was "--name") is now a positional parameter
tacker vnfd-create --vnfd-file blueprint.yaml hello-world-tacker
@@ -220,34 +279,33 @@ start() {
assert "models-tacker-002 (VNFD creation)" false
fi
-
- echo "$0: $(date) create VNF"
+ log "create VNF"
# newton: NAME (was "--name") is now a positional parameter
tacker vnf-create --vnfd-name hello-world-tacker hello-world-tacker
if [ $? -eq 1 ]; then fail; fi
- echo "$0: $(date) wait for hello-world-tacker to go ACTIVE"
+ log "wait for hello-world-tacker to go ACTIVE"
active=""
count=24
while [[ -z $active && $count -gt 0 ]]
do
active=$(tacker vnf-show hello-world-tacker | grep ACTIVE)
if [[ $(tacker vnf-show hello-world-tacker | grep -c ERROR) -gt 0 ]]; then
- echo "$0: $(date) hello-world-tacker VNF creation failed with state ERROR"
+ log "hello-world-tacker VNF creation failed with state ERROR"
assert "models-tacker-002 (VNF creation)" false
fi
let count=$count-1
sleep 30
- echo "$0: $(date) wait for hello-world-tacker to go ACTIVE"
+ log "wait for hello-world-tacker to go ACTIVE"
done
if [[ $count == 0 ]]; then
- echo "$0: $(date) hello-world-tacker VNF creation failed - timed out"
+ log "hello-world-tacker VNF creation failed - timed out"
assert "models-tacker-002 (VNF creation)" false
fi
assert "models-tacker-002 (VNF creation)" true
# Setup for workarounds
- echo "$0: $(date) directly set port security on ports (unsupported in Mitaka Tacker)"
+ log "directly set port security on ports (unsupported in Mitaka Tacker)"
# Alternate method
# HEAT_ID=$(tacker vnf-show hello-world-tacker | awk "/instance_id/ { print \$4 }")
# SERVER_ID=$(openstack stack resource list $HEAT_ID | awk "/VDU1 / { print \$4 }")
@@ -257,7 +315,7 @@ start() {
if [[ $(neutron port-show $id|grep $SERVER_ID) ]]; then neutron port-update ${id} --port-security-enabled=True; fi
done
- echo "$0: $(date) directly assign security group (unsupported in Mitaka Tacker)"
+ log "directly assign security group (unsupported in Mitaka Tacker)"
if [[ $(neutron security-group-list | awk "/ vHello / { print \$2 }") ]]; then neutron security-group-delete vHello; fi
neutron security-group-create vHello
neutron security-group-rule-create --direction ingress --protocol TCP --port-range-min 22 --port-range-max 22 vHello
@@ -265,20 +323,22 @@ start() {
openstack server add security group $SERVER_ID vHello
openstack server add security group $SERVER_ID default
- echo "$0: $(date) associate floating IP"
+ log "create floating IP"
get_floating_net
- FIP=$(nova floating-ip-create $FLOATING_NETWORK_NAME | awk "/$FLOATING_NETWORK_NAME/ { print \$4 }")
+ FIP=$(openstack floating ip create $FLOATING_NETWORK_NAME | awk "/floating_ip_address/ { print \$4 }")
+
+ log "associate floating IP \"$FIP\" to server \"$SERVER_ID\""
nova floating-ip-associate $SERVER_ID $FIP
# End setup for workarounds
- echo "$0: $(date) get vHello server address"
+ log "get vHello server address"
SERVER_IP=$(openstack server show $SERVER_ID | awk "/ addresses / { print \$6 }")
SERVER_URL="http://$SERVER_IP"
- echo "$0: $(date) wait 30 seconds for vHello server to startup at $SERVER_URL"
+ log "wait 30 seconds for vHello server to startup at $SERVER_URL"
sleep 30
- echo "$0: $(date) verify vHello server is running"
+ log "verify vHello server is running"
apt-get install -y curl
count=12
while [[ $(curl $SERVER_URL | grep -c "Hello World") == 0 ]]
@@ -292,7 +352,7 @@ start() {
assert "models-tacker-vnfd-002 (artifacts creation)" true
assert "models-tacker-vnfd-003 (user_data creation)" true
- echo "$0: $(date) verify contents of config drive are included in web page"
+ log "verify contents of config drive are included in web page"
id=$(curl $SERVER_URL | awk "/uuid/ { print \$2 }")
if [[ ! -z $id ]]; then
assert "models-tacker-vnfd-001 (config_drive creation)" true
@@ -304,16 +364,16 @@ start() {
stop() {
trap 'fail' ERR
- echo "$0: $(date) setup OpenStack CLI environment"
+ log "setup OpenStack CLI environment"
source /opt/tacker/admin-openrc.sh
if [[ "$(tacker vnf-list|grep hello-world-tacker|awk '{print $2}')" != '' ]]; then
- echo "$0: $(date) uninstall vHello blueprint via CLI"
+ log "uninstall vHello blueprint via CLI"
try 12 10 "tacker vnf-delete hello-world-tacker"
# It can take some time to delete a VNF - thus wait 2 minutes
count=12
while [[ $count -gt 0 && "$(tacker vnf-list|grep hello-world-tacker|awk '{print $2}')" != '' ]]; do
- echo "$0: $(date) waiting for hello-world-tacker VNF delete to complete"
+ log "waiting for hello-world-tacker VNF delete to complete"
sleep 10
let count=$count-1
done
@@ -326,7 +386,7 @@ stop() {
# It can take some time to delete a VNFD - thus wait 2 minutes
if [[ "$(tacker vnfd-list|grep hello-world-tacker|awk '{print $2}')" != '' ]]; then
- echo "$0: $(date) trying to delete the hello-world-tacker VNFD"
+ log "trying to delete the hello-world-tacker VNFD"
try 12 10 "tacker vnfd-delete hello-world-tacker"
if [[ "$(tacker vnfd-list|grep hello-world-tacker|awk '{print $2}')" == '' ]]; then
assert "models-tacker-005 (VNFD deletion)" true
@@ -350,16 +410,33 @@ stop() {
kid=($(openstack keypair list|grep vHello|awk '{print $2}')); for id in "${kid[@]}"; do openstack keypair delete ${id}; done
}
-forward_to_container () {
- echo "$0: $(date) pass $1 command to vHello.sh in tacker container"
- CONTAINER=$(sudo docker ps -a | awk "/tacker/ { print \$1 }")
- sudo docker exec $CONTAINER /bin/bash /opt/tacker/vHello_Tacker.sh $1
- if [ $? -eq 1 ]; then fail; fi
+function clean() {
+ trap 'ignore' ERR
+ log "Uninstall Tacker"
+ bash utils/tacker-setup.sh clean
+ sudo docker stop tacker
+ sudo docker rm -v tacker
+ sudo rm -rf /opt/tacker
+
+ log "Uninstall test environment"
+ pid=($(neutron port-list|grep -v "+"|grep -v id|awk '{print $2}')); for id in "${pid[@]}"; do neutron port-delete ${id}; done
+ sid=($(openstack security group list|grep security_group_local_security_group|awk '{print $2}')); for id in "${sid[@]}"; do openstack security group delete ${id}; done
+ neutron router-gateway-clear vnf_mgmt_router
+ pid=($(neutron router-port-list vnf_mgmt_router|grep -v name|awk '{print $2}')); for id in "${pid[@]}"; do neutron router-interface-delete vnf_mgmt_router vnf_mgmt; done
+ neutron router-delete vnf_mgmt_router
+ neutron net-delete vnf_mgmt
+ neutron router-gateway-clear vnf_private_router
+ pid=($(neutron router-port-list vnf_private_router|grep -v name|awk '{print $2}')); for id in "${pid[@]}"; do neutron router-interface-delete vnf_private_router vnf_private; done
+ neutron router-delete vnf_private_router
+ neutron net-delete vnf_private
}
test_start=`date +%s`
dist=`grep DISTRIB_ID /etc/*-release | awk -F '=' '{print $2}'`
+openrc=$2
+branch=$3
+
case "$1" in
setup)
setup $2 $3
@@ -369,48 +446,25 @@ case "$1" in
run)
setup $2 $3
copy_blueprint
- forward_to_container start
+ start
if [ $? -eq 1 ]; then fail; fi
pass
;;
start)
- if [[ -f /.dockerenv ]]; then
- start
- else
- copy_blueprint
- forward_to_container start
- fi
+ copy_blueprint
+ start
if [ $? -eq 1 ]; then fail; fi
pass
;;
stop)
- if [[ -f /.dockerenv ]]; then
- stop
- else
- forward_to_container stop
- fi
+ stop
if [ $? -eq 1 ]; then fail; fi
pass
;;
clean)
- echo "$0: $(date) Uninstall Tacker and test environment"
- 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
+ clean
pass
;;
*)
- echo "usage: "
- echo "$ bash vHello_Tacker.sh [setup|run] [<openrc>] [branch]"
- echo " setup: setup test environment"
- echo " <openrc>: location of OpenStack openrc file"
- echo " branch: OpenStack branch to install (default: master)"
- echo "$ bash vHello_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
+ if [[ "${BASH_SOURCE[0]}" == "${0}" ]]; then grep '#. ' $0; fi
esac