Fix line endings again 41/20741/1
authorblsaws <bryan.sullivan@att.com>
Fri, 9 Sep 2016 06:36:43 +0000 (23:36 -0700)
committerblsaws <bryan.sullivan@att.com>
Fri, 9 Sep 2016 06:36:43 +0000 (23:36 -0700)
JIRA: MODELS-23

Change-Id: I7a4d36373e87c64827c215891eee9ec1d84b37b1
Signed-off-by: blsaws <bryan.sullivan@att.com>
tests/blueprints/heat/hello-world.hot
tests/blueprints/tosca-vnfd-hello-world-tacker/blueprint.yaml
tests/blueprints/tosca-vnfd-hello-world-tacker/start.sh
tests/vHello.sh

index a4d6a7e..398bc62 100755 (executable)
@@ -1,38 +1,38 @@
-heat_template_version: 2013-05-23\r
-description: 'Hello World'\r
-parameters: {}\r
-resources:\r
-  VDU1:\r
-    type: OS::Nova::Server\r
-    properties:\r
-      availability_zone: nova\r
-      config_drive: false\r
-      flavor: {get_resource: VDU1_flavor}\r
-      image: cirros-0.3.4-x86_64-uec\r
-      networks:\r
-      - port:\r
-          get_resource: CP1\r
-      - port:\r
-          get_resource: CP2\r
-      - port:\r
-          get_resource: CP3\r
-      user_data_format: SOFTWARE_CONFIG\r
-  CP1:\r
-    type: OS::Neutron::Port\r
-    properties:\r
-      network: vnf_mgmt\r
-  CP2:\r
-    type: OS::Neutron::Port\r
-    properties:\r
-      network: vnf_private\r
-  CP3:\r
-    type: OS::Neutron::Port\r
-    properties:\r
-      network: public\r
-  VDU1_flavor:\r
-    properties: {disk: 1, ram: 512, vcpus: 1}\r
-    type: OS::Nova::Flavor\r
-outputs:\r
-  mgmt_ip-VDU1:\r
-    value:\r
-      get_attr: [CP1, fixed_ips, 0, ip_address]\r
+heat_template_version: 2013-05-23
+description: 'Hello World'
+parameters: {}
+resources:
+  VDU1:
+    type: OS::Nova::Server
+    properties:
+      availability_zone: nova
+      config_drive: false
+      flavor: {get_resource: VDU1_flavor}
+      image: cirros-0.3.4-x86_64-uec
+      networks:
+      - port:
+          get_resource: CP1
+      - port:
+          get_resource: CP2
+      - port:
+          get_resource: CP3
+      user_data_format: SOFTWARE_CONFIG
+  CP1:
+    type: OS::Neutron::Port
+    properties:
+      network: vnf_mgmt
+  CP2:
+    type: OS::Neutron::Port
+    properties:
+      network: vnf_private
+  CP3:
+    type: OS::Neutron::Port
+    properties:
+      network: public
+  VDU1_flavor:
+    properties: {disk: 1, ram: 512, vcpus: 1}
+    type: OS::Nova::Flavor
+outputs:
+  mgmt_ip-VDU1:
+    value:
+      get_attr: [CP1, fixed_ips, 0, ip_address]
index e8d91af..05fcf8a 100755 (executable)
@@ -1,57 +1,57 @@
-tosca_definitions_version: tosca_simple_profile_for_nfv_1_0_0\r
-\r
-description: Hello World\r
-\r
-metadata:\r
-  template_name: tosca-vnfd-hello-world\r
-\r
-topology_template:\r
-  node_templates:\r
-    VDU1:\r
-      type: tosca.nodes.nfv.VDU.Tacker\r
-      capabilities:\r
-        nfv_compute:\r
-          properties:\r
-            num_cpus: 1\r
-            mem_size: 1024 MB\r
-            disk_size: 4 GB\r
-      properties:\r
-        image: models-xenial-server\r
-        availability_zone: nova\r
-        mgmt_driver: noop\r
-        config: |\r
-          param0: key1\r
-          param1: key2\r
-\r
-    CP1:\r
-      type: tosca.nodes.nfv.CP.Tacker\r
-      properties:\r
-        management: true\r
-        anti_spoofing_protection: false\r
-      requirements:\r
-        - virtualLink:\r
-            node: VL1\r
-        - virtualBinding:\r
-            node: VDU1\r
-\r
-    CP2:\r
-      type: tosca.nodes.nfv.CP.Tacker\r
-      properties:\r
-        anti_spoofing_protection: false\r
-      requirements:\r
-        - virtualLink:\r
-            node: VL2\r
-        - virtualBinding:\r
-            node: VDU1\r
-\r
-    VL1:\r
-      type: tosca.nodes.nfv.VL\r
-      properties:\r
-        network_name: vnf_mgmt\r
-        vendor: Tacker\r
-\r
-    VL2:\r
-      type: tosca.nodes.nfv.VL\r
-      properties:\r
-        network_name: vnf_private\r
-        vendor: Tacker
\ No newline at end of file
+tosca_definitions_version: tosca_simple_profile_for_nfv_1_0_0
+
+description: Hello World
+
+metadata:
+  template_name: tosca-vnfd-hello-world
+
+topology_template:
+  node_templates:
+    VDU1:
+      type: tosca.nodes.nfv.VDU.Tacker
+      capabilities:
+        nfv_compute:
+          properties:
+            num_cpus: 1
+            mem_size: 1024 MB
+            disk_size: 4 GB
+      properties:
+        image: models-xenial-server
+        availability_zone: nova
+        mgmt_driver: noop
+        config: |
+          param0: key1
+          param1: key2
+
+    CP1:
+      type: tosca.nodes.nfv.CP.Tacker
+      properties:
+        management: true
+        anti_spoofing_protection: false
+      requirements:
+        - virtualLink:
+            node: VL1
+        - virtualBinding:
+            node: VDU1
+
+    CP2:
+      type: tosca.nodes.nfv.CP.Tacker
+      properties:
+        anti_spoofing_protection: false
+      requirements:
+        - virtualLink:
+            node: VL2
+        - virtualBinding:
+            node: VDU1
+
+    VL1:
+      type: tosca.nodes.nfv.VL
+      properties:
+        network_name: vnf_mgmt
+        vendor: Tacker
+
+    VL2:
+      type: tosca.nodes.nfv.VL
+      properties:
+        network_name: vnf_private
+        vendor: Tacker
index 55e51ce..d2bf204 100755 (executable)
@@ -1,47 +1,47 @@
-#!/bin/bash\r
-# Copyright 2016 AT&T Intellectual Property, Inc\r
-#\r
-# Licensed under the Apache License, Version 2.0 (the "License");\r
-# you may not use this file except in compliance with the License.\r
-# You may obtain a copy of the License at\r
-#\r
-# http://www.apache.org/licenses/LICENSE-2.0\r
-#\r
-# Unless required by applicable law or agreed to in writing, software\r
-# distributed under the License is distributed on an "AS IS" BASIS,\r
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
-# See the License for the specific language governing permissions and\r
-# limitations under the License.\r
-#\r
-# What this is: Startup script for a simple web server as part of the \r
-# vHello test of the OPNFV Models project.\r
-#\r
-# Status: this is a work in progress, under test.\r
-#\r
-# How to use:\r
-#   $ bash start.sh\r
-\r
-set -e\r
-\r
-sudo apt-get update\r
-sudo apt-get install -y python3\r
-\r
-cat <<EOF >index.html\r
-<!DOCTYPE html>\r
-<html>\r
-<head>\r
-<title>Hello World!</title>\r
-<meta name="viewport" content="width=device-width, minimum-scale=1.0, initial-scale=1"/>\r
-<style>\r
-body { width: 100%; background-color: white; color: black; padding: 0px; margin: 0px; font-family: sans-serif; font-size:100%; }\r
-</style>\r
-</head>\r
-<body>\r
-Hello World!<br>\r
-<a href="http://wiki.opnfv.org"><img src="logo.png"></a>\r
-</body></html>\r
-EOF\r
-\r
-wget https://www.opnfv.org/sites/all/themes/opnfv/logo.png\r
-\r
-nohup sudo python3 -m http.server 80 > /dev/null 2>&1 &
\ No newline at end of file
+#!/bin/bash
+# Copyright 2016 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.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+# What this is: Startup script for a simple web server as part of the 
+# vHello test of the OPNFV Models project.
+#
+# Status: this is a work in progress, under test.
+#
+# How to use:
+#   $ bash start.sh
+
+set -e
+
+sudo apt-get update
+sudo apt-get install -y python3
+
+cat <<EOF >index.html
+<!DOCTYPE html>
+<html>
+<head>
+<title>Hello World!</title>
+<meta name="viewport" content="width=device-width, minimum-scale=1.0, initial-scale=1"/>
+<style>
+body { width: 100%; background-color: white; color: black; padding: 0px; margin: 0px; font-family: sans-serif; font-size:100%; }
+</style>
+</head>
+<body>
+Hello World!<br>
+<a href="http://wiki.opnfv.org"><img src="logo.png"></a>
+</body></html>
+EOF
+
+wget https://www.opnfv.org/sites/all/themes/opnfv/logo.png
+
+nohup sudo python3 -m http.server 80 > /dev/null 2>&1 &
index 4486541..f8453b0 100644 (file)
-#!/bin/bash\r
-# Copyright 2016 AT&T Intellectual Property, Inc\r
-#\r
-# Licensed under the Apache License, Version 2.0 (the "License");\r
-# you may not use this file except in compliance with the License.\r
-# You may obtain a copy of the License at\r
-#\r
-# http://www.apache.org/licenses/LICENSE-2.0\r
-#\r
-# Unless required by applicable law or agreed to in writing, software\r
-# distributed under the License is distributed on an "AS IS" BASIS,\r
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
-# See the License for the specific language governing permissions and\r
-# limitations under the License.\r
-#\r
-# What this is: Deployment test for the Cloudify Hello World blueprint. \r
-#\r
-# Status: this is a work in progress, under test.\r
-#\r
-# How to use:\r
-#   $ wget https://git.opnfv.org/cgit/models/plain/tests/vHello.sh\r
-#   $ bash vHello.sh [cloudify-cli|cloudify-manager] [setup|start|clean]\r
-#   cloudify-cli: use Cloudify CLI\r
-#   cloudify-manager: use Cloudify Manager\r
-#   setup: setup test environment\r
-#   start: run test\r
-#   clean: cleanup after test\r
-\r
-set -x\r
-\r
-pass() {\r
-  echo "Hooray!"\r
-  set +x #echo off\r
-  exit 0\r
-}\r
-\r
-# Use this to trigger fail() at the right places\r
-# if [ "$RESULT" == "Test Failed!" ]; then fail; fi\r
-fail() {\r
-  echo "Test Failed!"\r
-  set +x\r
-  exit 1\r
-}\r
-\r
-function get_floating_net () {\r
-  network_ids=($(neutron net-list|grep -v "+"|grep -v name|awk '{print $2}'))\r
-  for id in ${network_ids[@]}; do\r
-      [[ $(neutron net-show ${id}|grep 'router:external'|grep -i "true") != "" ]] && floating_network_id=${id}\r
-  done\r
-  if [[ $floating_network_id ]]; then \r
-    floating_network_name=$(openstack network show $floating_network_id | awk "/ name / { print \$4 }")\r
-  else\r
-    echo "$0: Floating network not found"\r
-    exit 1\r
-  fi\r
-}\r
-\r
-select_manager() {\r
-  echo "$0: select manager to use"\r
-  MANAGER_IP=$(openstack server list | awk "/ cloudify-manager-server / { print \$9 }")\r
-  cfy use -t $MANAGER_IP\r
-  if [ $? -eq 1 ]; then fail; fi\r
-}\r
-\r
-start() {\r
-  echo "$0: reset blueprints folder"\r
-  if [[ -d /tmp/cloudify/blueprints ]]; then rm -rf /tmp/cloudify/blueprints; fi\r
-  mkdir -p /tmp/cloudify/blueprints\r
-  cd /tmp/cloudify/blueprints\r
-\r
-  echo "$0: clone cloudify-hello-world-example"\r
-  if [[ "$1" == "cloudify-manager" ]]; then \r
-    git clone https://github.com/cloudify-cosmo/cloudify-hello-world-example.git\r
-    cd cloudify-hello-world-example\r
-    git checkout 3.4.1-build\r
-  else\r
-    git clone https://github.com/blsaws/cloudify-cli-hello-world-example.git\r
-    cd cloudify-cli-hello-world-example\r
-  fi\r
-\r
-  cd /tmp/cloudify/blueprints\r
-\r
-  echo "$0: setup OpenStack CLI environment"\r
-  source /tmp/cloudify/admin-openrc.sh\r
-\r
-  echo "$0: Setup image_id"\r
-# image=$(openstack image list | awk "/ CentOS-7-x86_64-GenericCloud-1607 / { print \$2 }")\r
-  image=$(openstack image list | awk "/ xenial-server / { print \$2 }")\r
-  if [ -z $image ]; then \r
-#   glance --os-image-api-version 1 image-create --name CentOS-7-x86_64-GenericCloud-1607 --disk-format qcow2 --location http://cloud.centos.org/centos/7/images/CentOS-7-x86_64-GenericCloud-1607.qcow2 --container-format bare\r
-    glance --os-image-api-version 1 image-create --name xenial-server --disk-format qcow2 --location http://cloud-images.ubuntu.com/xenial/current/xenial-server-cloudimg-amd64-disk1.img --container-format bare\r
-  fi\r
-# image=$(openstack image list | awk "/ CentOS-7-x86_64-GenericCloud-1607 / { print \$2 }")\r
-  image=$(openstack image list | awk "/ xenial-server / { print \$2 }")\r
-       \r
-  if [[ "$1" == "cloudify-manager" ]]; then \r
-    echo "$0: create Cloudify Manager blueprint inputs file"\r
-    # Set host image per Cloudify agent compatibility: http://docs.getcloudify.org/3.4.0/agents/overview/\r
-    cd /tmp/cloudify/blueprints\r
-    cat <<EOF >vHello-inputs.yaml\r
-image: xenial-server\r
-flavor: m1.small\r
-agent_user: ubuntu\r
-webserver_port: 8080\r
-EOF\r
-  else\r
-    # Cloudify CLI use\r
-    echo "$0: Get external network for Floating IP allocations"\r
-    get_floating_net\r
-\r
-    echo "$0: Create Nova key pair"\r
-    mkdir -p ~/.ssh\r
-    nova keypair-delete vHello\r
-    nova keypair-add vHello > ~/.ssh/vHello.pem\r
-    chmod 600 ~/.ssh/vHello.pem\r
-\r
-    echo "$0: create Cloudify CLI blueprint inputs file"\r
-    cat <<EOF >vHello-inputs.yaml\r
-image: xenial-server\r
-flavor: m1.small\r
-external_network_name: $floating_network_name\r
-webserver_port: 8080\r
-key_name: vHello\r
-ssh_key_filename: /root/.ssh/vHello.pem\r
-ssh_user: ubuntu\r
-ssh_port: 22\r
-EOF\r
-  fi\r
-\r
-  echo "$0: initialize cloudify environment"\r
-  cd /tmp/cloudify/blueprints\r
-  cfy init -r\r
-\r
-  if [[ "$1" == "cloudify-manager" ]]; then \r
-    select_manager\r
-    echo "$0: upload blueprint via manager"\r
-    cfy blueprints delete -b cloudify-hello-world-example\r
-    cfy blueprints upload -p cloudify-hello-world-example/blueprint.yaml -b cloudify-hello-world-example\r
-    if [ $? -eq 1 ]; then fail; fi\r
-\r
-    echo "$0: create vHello deployment via manager"\r
-    cfy deployments create --debug -d vHello -i vHello-inputs.yaml -b cloudify-hello-world-example\r
-    if [ $? -eq 1 ]; then fail; fi\r
-\r
-    echo "$0: execute 'install' workflow for vHello deployment via manager"\r
-    cfy executions start -w install -d vHello --timeout 1800\r
-    if [ $? -eq 1 ]; then fail; fi\r
-\r
-    echo "$0: get vHello server address"\r
-    SERVER_URL=$(cfy deployments outputs -d vHello | awk "/ Value: / { print \$2 }")\r
-  else \r
-    echo "$0: install local blueprint"\r
-    # don't use --install-plugins, causes openstack plugin 1.4.1 to be rolled back to 1.4 and then an error\r
-    cfy local install -i vHello-inputs.yaml -p cloudify-cli-hello-world-example/blueprint.yaml --allow-custom-parameters --parameters="floating_network_name=$floating_network_name" --task-retries=10 --task-retry-interval=30\r
-   if [ $? -eq 1 ]; then fail; fi\r
-\r
-    echo "$0: get vHello server address"\r
-    SERVER_URL=$(cfy local outputs | awk "/http_endpoint/ { print \$2 }" | sed -- 's/"//g')\r
-  fi\r
-\r
-  echo "$0: verify vHello server is running"\r
-  apt-get install -y curl\r
-  if [[ $(curl $SERVER_URL | grep -c "Hello, World!") != 1 ]]; then fail; fi\r
-\r
-  pass\r
-}\r
-\r
-clean() {\r
-  echo "$0: activate cloudify Virtualenv"\r
-  source ~/cloudify/venv/bin/activate\r
-\r
-  echo "$0: setup OpenStack CLI environment"\r
-  source /tmp/cloudify/admin-openrc.sh\r
-\r
-  echo "$0: initialize cloudify environment"\r
-  cd /tmp/cloudify/blueprints\r
-\r
- if [[ "$1" == "cloudify-manager" ]]; then \r
-    select_manager\r
-    echo "$0: uninstall vHello blueprint via manager"\r
-    cfy executions start -w uninstall -d vHello\r
-    if [ $? -eq 1 ]; then fail; fi\r
-\r
-    echo "$0: delete vHello blueprint"\r
-    cfy deployments delete -d vHello\r
-    if [ $? -eq 1 ]; then fail; fi\r
-  else \r
-    echo "$0: uninstall vHello blueprint via CLI"\r
-    cfy local uninstall\r
-    if [ $? -eq 1 ]; then fail; fi\r
-  fi\r
-  pass\r
-}\r
-\r
-if [[ "$2" == "setup" ]]; then\r
-  echo "$0: Setup temp test folder /tmp/cloudify and copy this script there"\r
-  mkdir /tmp/cloudify\r
-  chmod 777 /tmp/cloudify/\r
-  cp $0 /tmp/cloudify/.\r
-  chmod 755 /tmp/cloudify/*.sh\r
-\r
-  echo "$0: cloudify-setup part 1"\r
-  bash utils/cloudify-setup.sh $1 init\r
-\r
-  echo "$0: cloudify-setup part 2"\r
-  CONTAINER=$(sudo docker ps -l | awk "/cloudify/ { print \$1 }")\r
-  sudo docker exec $CONTAINER /tmp/cloudify/cloudify-setup.sh $1 setup\r
-  if [ $? -eq 1 ]; then fail; fi\r
-  pass\r
-else\r
-  if [[ $# -eq 3 ]]; then\r
-    # running inside the cloudify container, ready to go\r
-    if [[ "$3" == "start" ]]; then start $1; fi\r
-    if [[ "$3" == "clean" ]]; then clean $1; fi    \r
-  else\r
-    echo "$0: pass $2 command to vHello.sh in cloudify container"\r
-    CONTAINER=$(sudo docker ps -a | awk "/cloudify/ { print \$1 }")\r
-    sudo docker exec $CONTAINER /tmp/cloudify/vHello.sh $1 $2 $2\r
-    if [ $? -eq 1 ]; then fail; fi\r
-    pass\r
-  fi\r
-fi\r
+#!/bin/bash
+# Copyright 2016 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.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+# What this is: Deployment test for the Cloudify Hello World blueprint. 
+#
+# Status: this is a work in progress, under test.
+#
+# How to use:
+#   $ wget https://git.opnfv.org/cgit/models/plain/tests/vHello.sh
+#   $ bash vHello.sh [cloudify-cli|cloudify-manager] [setup|start|clean]
+#   cloudify-cli: use Cloudify CLI
+#   cloudify-manager: use Cloudify Manager
+#   setup: setup test environment
+#   start: run test
+#   clean: cleanup after test
+
+set -x
+
+pass() {
+  echo "Hooray!"
+  set +x #echo off
+  exit 0
+}
+
+# Use this to trigger fail() at the right places
+# if [ "$RESULT" == "Test Failed!" ]; then fail; fi
+fail() {
+  echo "Test Failed!"
+  set +x
+  exit 1
+}
+
+function 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 }")
+  else
+    echo "$0: Floating network not found"
+    exit 1
+  fi
+}
+
+select_manager() {
+  echo "$0: select manager to use"
+  MANAGER_IP=$(openstack server list | awk "/ cloudify-manager-server / { print \$9 }")
+  cfy use -t $MANAGER_IP
+  if [ $? -eq 1 ]; then fail; fi
+}
+
+start() {
+  echo "$0: reset blueprints folder"
+  if [[ -d /tmp/cloudify/blueprints ]]; then rm -rf /tmp/cloudify/blueprints; fi
+  mkdir -p /tmp/cloudify/blueprints
+  cd /tmp/cloudify/blueprints
+
+  echo "$0: clone cloudify-hello-world-example"
+  if [[ "$1" == "cloudify-manager" ]]; then 
+    git clone https://github.com/cloudify-cosmo/cloudify-hello-world-example.git
+    cd cloudify-hello-world-example
+    git checkout 3.4.1-build
+  else
+    git clone https://github.com/blsaws/cloudify-cli-hello-world-example.git
+    cd cloudify-cli-hello-world-example
+  fi
+
+  cd /tmp/cloudify/blueprints
+
+  echo "$0: setup OpenStack CLI environment"
+  source /tmp/cloudify/admin-openrc.sh
+
+  echo "$0: Setup image_id"
+# image=$(openstack image list | awk "/ CentOS-7-x86_64-GenericCloud-1607 / { print \$2 }")
+  image=$(openstack image list | awk "/ xenial-server / { print \$2 }")
+  if [ -z $image ]; then 
+#   glance --os-image-api-version 1 image-create --name CentOS-7-x86_64-GenericCloud-1607 --disk-format qcow2 --location http://cloud.centos.org/centos/7/images/CentOS-7-x86_64-GenericCloud-1607.qcow2 --container-format bare
+    glance --os-image-api-version 1 image-create --name xenial-server --disk-format qcow2 --location http://cloud-images.ubuntu.com/xenial/current/xenial-server-cloudimg-amd64-disk1.img --container-format bare
+  fi
+# image=$(openstack image list | awk "/ CentOS-7-x86_64-GenericCloud-1607 / { print \$2 }")
+  image=$(openstack image list | awk "/ xenial-server / { print \$2 }")
+       
+  if [[ "$1" == "cloudify-manager" ]]; then 
+    echo "$0: create Cloudify Manager blueprint inputs file"
+    # Set host image per Cloudify agent compatibility: http://docs.getcloudify.org/3.4.0/agents/overview/
+    cd /tmp/cloudify/blueprints
+    cat <<EOF >vHello-inputs.yaml
+image: xenial-server
+flavor: m1.small
+agent_user: ubuntu
+webserver_port: 8080
+EOF
+  else
+    # Cloudify CLI use
+    echo "$0: Get external network for Floating IP allocations"
+    get_floating_net
+
+    echo "$0: Create Nova key pair"
+    mkdir -p ~/.ssh
+    nova keypair-delete vHello
+    nova keypair-add vHello > ~/.ssh/vHello.pem
+    chmod 600 ~/.ssh/vHello.pem
+
+    echo "$0: create Cloudify CLI blueprint inputs file"
+    cat <<EOF >vHello-inputs.yaml
+image: xenial-server
+flavor: m1.small
+external_network_name: $floating_network_name
+webserver_port: 8080
+key_name: vHello
+ssh_key_filename: /root/.ssh/vHello.pem
+ssh_user: ubuntu
+ssh_port: 22
+EOF
+  fi
+
+  echo "$0: initialize cloudify environment"
+  cd /tmp/cloudify/blueprints
+  cfy init -r
+
+  if [[ "$1" == "cloudify-manager" ]]; then 
+    select_manager
+    echo "$0: upload blueprint via manager"
+    cfy blueprints delete -b cloudify-hello-world-example
+    cfy blueprints upload -p cloudify-hello-world-example/blueprint.yaml -b cloudify-hello-world-example
+    if [ $? -eq 1 ]; then fail; fi
+
+    echo "$0: create vHello deployment via manager"
+    cfy deployments create --debug -d vHello -i vHello-inputs.yaml -b cloudify-hello-world-example
+    if [ $? -eq 1 ]; then fail; fi
+
+    echo "$0: execute 'install' workflow for vHello deployment via manager"
+    cfy executions start -w install -d vHello --timeout 1800
+    if [ $? -eq 1 ]; then fail; fi
+
+    echo "$0: get vHello server address"
+    SERVER_URL=$(cfy deployments outputs -d vHello | awk "/ Value: / { print \$2 }")
+  else 
+    echo "$0: install local blueprint"
+    # don't use --install-plugins, causes openstack plugin 1.4.1 to be rolled back to 1.4 and then an error
+    cfy local install -i vHello-inputs.yaml -p cloudify-cli-hello-world-example/blueprint.yaml --allow-custom-parameters --parameters="floating_network_name=$floating_network_name" --task-retries=10 --task-retry-interval=30
+   if [ $? -eq 1 ]; then fail; fi
+
+    echo "$0: get vHello server address"
+    SERVER_URL=$(cfy local outputs | awk "/http_endpoint/ { print \$2 }" | sed -- 's/"//g')
+  fi
+
+  echo "$0: verify vHello server is running"
+  apt-get install -y curl
+  if [[ $(curl $SERVER_URL | grep -c "Hello, World!") != 1 ]]; then fail; fi
+
+  pass
+}
+
+clean() {
+  echo "$0: activate cloudify Virtualenv"
+  source ~/cloudify/venv/bin/activate
+
+  echo "$0: setup OpenStack CLI environment"
+  source /tmp/cloudify/admin-openrc.sh
+
+  echo "$0: initialize cloudify environment"
+  cd /tmp/cloudify/blueprints
+
+ if [[ "$1" == "cloudify-manager" ]]; then 
+    select_manager
+    echo "$0: uninstall vHello blueprint via manager"
+    cfy executions start -w uninstall -d vHello
+    if [ $? -eq 1 ]; then fail; fi
+
+    echo "$0: delete vHello blueprint"
+    cfy deployments delete -d vHello
+    if [ $? -eq 1 ]; then fail; fi
+  else 
+    echo "$0: uninstall vHello blueprint via CLI"
+    cfy local uninstall
+    if [ $? -eq 1 ]; then fail; fi
+  fi
+  pass
+}
+
+if [[ "$2" == "setup" ]]; then
+  echo "$0: Setup temp test folder /tmp/cloudify and copy this script there"
+  mkdir /tmp/cloudify
+  chmod 777 /tmp/cloudify/
+  cp $0 /tmp/cloudify/.
+  chmod 755 /tmp/cloudify/*.sh
+
+  echo "$0: cloudify-setup part 1"
+  bash utils/cloudify-setup.sh $1 init
+
+  echo "$0: cloudify-setup part 2"
+  CONTAINER=$(sudo docker ps -l | awk "/cloudify/ { print \$1 }")
+  sudo docker exec $CONTAINER /tmp/cloudify/cloudify-setup.sh $1 setup
+  if [ $? -eq 1 ]; then fail; fi
+  pass
+else
+  if [[ $# -eq 3 ]]; then
+    # running inside the cloudify container, ready to go
+    if [[ "$3" == "start" ]]; then start $1; fi
+    if [[ "$3" == "clean" ]]; then clean $1; fi    
+  else
+    echo "$0: pass $2 command to vHello.sh in cloudify container"
+    CONTAINER=$(sudo docker ps -a | awk "/cloudify/ { print \$1 }")
+    sudo docker exec $CONTAINER /tmp/cloudify/vHello.sh $1 $2 $2
+    if [ $? -eq 1 ]; then fail; fi
+    pass
+  fi
+fi