node_templates:
VDU1:
type: tosca.nodes.nfv.VDU.Tacker
- artifacts:
- VNFImage:
- type: tosca.artifacts.Deployment.Image.VM
- file: http://cloud-images.ubuntu.com/releases/xenial/release/ubuntu-16.04-server-cloudimg-amd64-disk1.img
capabilities:
nfv_compute:
properties:
mem_size: 1024 MB
disk_size: 4 GB
properties:
+ image: models-xenial-server
availability_zone: nova
mgmt_driver: noop
config_drive: true
<pubkey>
EOM
sudo mount /dev/sr0 /mnt/
- mkdir ~/www
- mkdir ~/www/html
- cat > ~/www/Dockerfile <<EOM
+ mkdir /tmp/www
+ cd /tmp/www
+ mkdir html
+ cat >Dockerfile <<EOM
FROM nginx
COPY html /usr/share/nginx/html
EOM
host=$(hostname)
id=$(cut -d ',' -f 3 /mnt/openstack/latest/meta_data.json)
- cat << EOM | sudo tee index.html
+ cat <<EOM >html/index.html
<!DOCTYPE html>
<html>
<head>
</div>
</body></html>
EOM
- wget https://git.opnfv.org/models/plain/tests/blueprints/tosca-vnfd-3node-tacker/favicon.ico -O ~/www/html/favicon.ico
+ wget -O /tmp/www/html/favicon.ico https://git.opnfv.org/models/plain/tests/blueprints/tosca-vnfd-3node-tacker/favicon.ico
sudo apt-get install apt-transport-https ca-certificates curl software-properties-common
curl -fsSL https://apt.dockerproject.org/gpg | sudo apt-key add -
sudo apt-key update
- echo "deb https://apt.dockerproject.org/repo ubuntu-xenial main" | sudo tee -a /etc/apt/sources.list.d/docker.list
- sudo add-apt-repository "deb https://apt.dockerproject.org/repo/ ubuntu-$(lsb_release -cs) main"
+ echo "deb https://apt.dockerproject.org/repo ubuntu-xenial main" >~/dockerrepo
+ sudo tee -a /etc/apt/sources.list.d/docker.list ~/dockerrepo
+ sudo add-apt-repository "deb https://apt.dockerproject.org/repo/ ubuntu-xenial main"
sudo apt-get update
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: |
VDU2:
type: tosca.nodes.nfv.VDU.Tacker
- artifacts:
- VNFImage:
- type: tosca.artifacts.Deployment.Image.VM
- file: http://cloud-images.ubuntu.com/releases/xenial/release/ubuntu-16.04-server-cloudimg-amd64-disk1.img
capabilities:
nfv_compute:
properties:
mem_size: 1024 MB
disk_size: 4 GB
properties:
+ image: models-xenial-server
availability_zone: nova
mgmt_driver: noop
config_drive: true
<pubkey>
EOM
sudo mount /dev/sr0 /mnt/
- mkdir ~/www
- mkdir ~/www/html
- cat > ~/www/Dockerfile <<EOM
+ mkdir /tmp/www
+ cd /tmp/www
+ mkdir html
+ cat >Dockerfile <<EOM
FROM nginx
COPY html /usr/share/nginx/html
EOM
host=$(hostname)
id=$(cut -d ',' -f 3 /mnt/openstack/latest/meta_data.json)
- cat << EOM | sudo tee index.html
+ cat <<EOM >html/index.html
<!DOCTYPE html>
<html>
<head>
</div>
</body></html>
EOM
- wget https://git.opnfv.org/models/plain/tests/blueprints/tosca-vnfd-3node-tacker/favicon.ico -O ~/www/html/favicon.ico
+ wget -O /tmp/www/html/favicon.ico https://git.opnfv.org/models/plain/tests/blueprints/tosca-vnfd-3node-tacker/favicon.ico
sudo apt-get install apt-transport-https ca-certificates curl software-properties-common
curl -fsSL https://apt.dockerproject.org/gpg | sudo apt-key add -
sudo apt-key update
- echo "deb https://apt.dockerproject.org/repo ubuntu-xenial main" | sudo tee -a /etc/apt/sources.list.d/docker.list
- sudo add-apt-repository "deb https://apt.dockerproject.org/repo/ ubuntu-$(lsb_release -cs) main"
+ echo "deb https://apt.dockerproject.org/repo ubuntu-xenial main" >~/dockerrepo
+ sudo tee -a /etc/apt/sources.list.d/docker.list ~/dockerrepo
+ sudo add-apt-repository "deb https://apt.dockerproject.org/repo/ ubuntu-xenial main"
sudo apt-get update
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: |
VDU3:
type: tosca.nodes.nfv.VDU.Tacker
- artifacts:
- VNFImage:
- type: tosca.artifacts.Deployment.Image.VM
- file: http://cloud-images.ubuntu.com/releases/xenial/release/ubuntu-16.04-server-cloudimg-amd64-disk1.img
capabilities:
nfv_compute:
properties:
mem_size: 1024 MB
disk_size: 4 GB
properties:
+ image: models-xenial-server
availability_zone: nova
mgmt_driver: noop
user_data_format: RAW
cat << EOM >/home/ubuntu/.ssh/authorized_keys
<pubkey>
EOM
+ cat << EOF >/tmp/setup.sh
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 <vdu1_ip>: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 <vdu2_ip>: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 <vdu1_ip>: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 <vdu2_ip>:80
sudo iptables -t nat -A POSTROUTING -j MASQUERADE
+ EOF
+ bash /tmp/setup.sh
config: |
param0: key1
param1: key2
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
+# commented out as this option seems to cause instance creation to timeout. These options will be covered in separate tests.
+# artifacts:
+# VNFImage:
+# type: tosca.artifacts.Deployment.Image.VM
+# file: http://cloud-images.ubuntu.com/releases/xenial/release/ubuntu-16.04-server-cloudimg-amd64-disk1.img
capabilities:
nfv_compute:
properties:
mem_size: 1024 MB
disk_size: 4 GB
properties:
-# commented out to test the VNFImage attribute above. These options will be covered in separate tests.
-# image: models-xenial-server
+ image: models-xenial-server
availability_zone: nova
mgmt_driver: noop
config_drive: true
openstack endpoint create --region $region \
--publicurl "http://$ip:9890/" \
--adminurl "http://$ip:9890/" \
- --internalurl "http://$ip:9890/" $sid
+ --internalurl "http://$ip:9890/" nfv-orchestration
echo "$0: $(date) Clone Tacker"
if [[ -d /opt/tacker/tacker ]]; then rm -rf /opt/tacker/tacker; fi
setup () {
trap 'fail' ERR
- echo "$0: $(date) Setup temp test folder /opt/tacker and copy this script there"
+
+ 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) Create image models-xenial-server"
+ 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 --location http://cloud-images.ubuntu.com/releases/xenial/release/ubuntu-16.04-server-cloudimg-amd64-disk1.img --container-format bare; fi
+
echo "$0: $(date) tacker-setup part 1"
bash utils/tacker-setup.sh init
if [ $? -eq 1 ]; then fail; fi
say_hello() {
echo "$0: $(date) Testing $1"
pass=false
- count=6
+ count=10
while [[ $count > 0 && $pass != true ]]
do
- sleep 10
+ sleep 30
let count=$count-1
if [[ $(curl $1 | grep -c "Hello World") > 0 ]]; then
echo "$0: $(date) Hello World found at $1"
}
copy_blueprint() {
+ echo "$0: $(date) copy test script to /opt/tacker"
+ cp $0 /opt/tacker/.
+
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
start() {
- trap 'fail' ERR
+# Disable trap for now, need to test to ensure premature fail does not occur
+# trap 'fail' ERR
echo "$0: $(date) setup OpenStack CLI environment"
source /opt/tacker/admin-openrc.sh
vdu_url[2]="http://${vdu_ip[2]}"
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
+
+ count=0
+ resp=$(curl http://${vdu_ip[1]})
+ while [[ $count < 10 && "$resp" == "" ]]; do
+ echo "$0: $(date) waiting for web server at VDU1 to startup"
+ sleep 60
+ let count=$count+1
+ resp=$(curl http://${vdu_ip[1]})
+ done
+
+ echo "$0: $(date) verify vHello server is running at each web server and via the LB"
say_hello http://${vdu_ip[1]}
say_hello http://${vdu_ip[2]}
say_hello http://${vdu_ip[3]}
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
+# This part will apply for tests that dynamically create the VDU base image
+# 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
}
setup () {
- echo "$0: $(date) Setup temp test folder /opt/tacker and copy this script there"
+ 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) Create image models-xenial-server"
+ 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 --location http://cloud-images.ubuntu.com/releases/xenial/release/ubuntu-16.04-server-cloudimg-amd64-disk1.img --container-format bare; fi
+
echo "$0: $(date) tacker-setup part 1"
bash utils/tacker-setup.sh init
if [ $? -eq 1 ]; then fail; fi
}
copy_blueprint() {
+ echo "$0: $(date) copy test script to /opt/tacker"
+ cp $0 /opt/tacker/.
+
echo "$0: $(date) reset blueprints folder"
if [[ -d /opt/tacker/blueprints/tosca-vnfd-hello-world-tacker ]]; then
rm -rf /opt/tacker/blueprints/tosca-vnfd-hello-world-tacker
}
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"
source /opt/tacker/admin-openrc.sh
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"
+ echo "$0: $(date) wait 30 seconds for vHello server to startup at $SERVER_URL"
sleep 30
echo "$0: $(date) verify vHello server is running"
}
stop() {
+ trap 'fail' ERR
+
echo "$0: $(date) setup OpenStack CLI environment"
source /opt/tacker/admin-openrc.sh
# It can take some time to delete a VNF - thus wait 2 minutes
count=12
while [[ $count > 0 && "$(tacker vnf-list|grep hello-world-tacker|awk '{print $2}')" != '' ]]; do
+ echo "$0: $(date) waiting for hello-world-tacker VNF delete to complete"
sleep 10
let count=$count-1
done
# 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"
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
fi
fi
- 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
+# This part will apply for tests that dynamically create the VDU base image
+# 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
# 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