Fix line endings 91/19891/1
authorblsaws <bryan.sullivan@att.com>
Tue, 30 Aug 2016 14:04:00 +0000 (07:04 -0700)
committerblsaws <bryan.sullivan@att.com>
Tue, 30 Aug 2016 14:04:00 +0000 (07:04 -0700)
JIRA: MODELS-23

Change-Id: I159f8fc9232459ed8129d8e02a3c8c0267ca7f9a
Signed-off-by: blsaws <bryan.sullivan@att.com>
tests/utils/cloudify-setup.sh
tests/vHello.sh

index cd4f198..492e617 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: Setup script for the Cloudify Manager starting from an\r
-# Unbuntu Xenial docker container.\r
-#\r
-# Status: this is a work in progress, under test.\r
-#\r
-# How to use:\r
-#   $ bash cloudify-setup.sh [cloudify-cli|cloudify-manager] [ 1 || 2 ]\r
-#   cloudify-cli: use Cloudify CLI\r
-#   cloudify-manager: use Cloudify Manager\r
-#   1: Initial setup of the docker container\r
-#   2: Setup of the Cloudify Manager in the docker container\r
-\r
-function setenv () {\r
-if [ "$dist" == "Ubuntu" ]; then\r
-  echo "$0: Ubuntu-based install"\r
-  echo "$0: Create the environment file"\r
-  KEYSTONE_HOST=$(juju status --format=short | awk "/keystone\/0/ { print \$3 }")\r
-  cat <<EOF >/tmp/cloudify/admin-openrc.sh\r
-export CONGRESS_HOST=$(juju status --format=short | awk "/openstack-dashboard/ { print \$3 }")\r
-export HORIZON_HOST=$(juju status --format=short | awk "/openstack-dashboard/ { print \$3 }")\r
-export KEYSTONE_HOST=$KEYSTONE_HOST\r
-export CEILOMETER_HOST=$(juju status --format=short | awk "/ceilometer\/0/ { print \$3 }")\r
-export CINDER_HOST=$(juju status --format=short | awk "/cinder\/0/ { print \$3 }")\r
-export GLANCE_HOST=$(juju status --format=short | awk "/glance\/0/ { print \$3 }")\r
-export NEUTRON_HOST=$(juju status --format=short | awk "/neutron-api\/0/ { print \$3 }")\r
-export NOVA_HOST=$(juju status --format=short | awk "/nova-cloud-controller\/0/ { print \$3 }")\r
-export OS_USERNAME=admin\r
-export OS_PASSWORD=openstack\r
-export OS_TENANT_NAME=admin\r
-export OS_AUTH_URL=http://$KEYSTONE_HOST:5000/v2.0\r
-export OS_REGION_NAME=RegionOne\r
-EOF\r
-else\r
-  # Centos\r
-  echo "$0: Centos-based install"\r
-  echo "$0: Setup undercloud environment so we can get overcloud Controller server address"\r
-  source ~/stackrc\r
-  echo "$0: Get address of Controller node"\r
-  export CONTROLLER_HOST1=$(openstack server list | awk "/overcloud-controller-0/ { print \$8 }" | sed 's/ctlplane=//g')\r
-  echo "$0: Create the environment file"\r
-  cat <<EOF >/tmp/cloudify/admin-openrc.sh\r
-export CONGRESS_HOST=$CONTROLLER_HOST1\r
-export KEYSTONE_HOST=$CONTROLLER_HOST1\r
-export CEILOMETER_HOST=$CONTROLLER_HOST1\r
-export CINDER_HOST=$CONTROLLER_HOST1\r
-export GLANCE_HOST=$CONTROLLER_HOST1\r
-export NEUTRON_HOST=$CONTROLLER_HOST1\r
-export NOVA_HOST=$CONTROLLER_HOST1\r
-EOF\r
-  cat ~/overcloudrc >>/tmp/cloudify/admin-openrc.sh\r
-  source ~/overcloudrc\r
-  export OS_REGION_NAME=$(openstack endpoint list | awk "/ nova / { print \$4 }")\r
-  # sed command below is a workaound for a bug - region shows up twice for some reason\r
-  cat <<EOF | sed '$d' >>/tmp/cloudify/admin-openrc.sh\r
-export OS_REGION_NAME=$OS_REGION_NAME\r
-EOF\r
-fi\r
-source /tmp/cloudify/admin-openrc.sh\r
-}\r
-\r
-function get_external_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") != "" ]] && ext_net_id=${id}\r
-  done\r
-  if [[ $ext_net_id ]]; then \r
-    EXTERNAL_NETWORK_NAME=$(openstack network show $ext_net_id | awk "/ name / { print \$4 }")\r
-    EXTERNAL_SUBNET_ID=$(openstack network show $EXTERNAL_NETWORK_NAME | awk "/ subnets / { print \$4 }")\r
-  else\r
-    echo "$0: External network not found"\r
-    exit 1\r
-  fi\r
-}\r
-\r
-dist=`grep DISTRIB_ID /etc/*-release | awk -F '=' '{print $2}'`\r
-if [ "$2" == "1" ]; then\r
-  echo "$0: Copy this script to /tmp/cloudify"\r
-       mkdir /tmp/cloudify\r
-  cp $0 /tmp/cloudify/.\r
-  chmod 755 /tmp/cloudify/*.sh\r
-\r
-  echo "$0: Setup admin-openrc.sh"\r
-  setenv\r
-  echo "$0: Setup container"\r
-  if [ "$dist" == "Ubuntu" ]; then\r
-    # xenial is needed for python 3.5\r
-    sudo docker pull ubuntu:xenial\r
-    sudo service docker start\r
-#    sudo docker run -it  -v ~/git/joid/ci/cloud/admin-openrc.sh:/root/admin-openrc.sh -v ~/cloudify/cloudify-setup.sh:/root/cloudify-setup.sh ubuntu:xenial /bin/bash\r
-    sudo docker run -it -d -v /tmp/cloudify/:/tmp/cloudify ubuntu:xenial /bin/bash\r
-    exit 0\r
-       else \r
-    # Centos\r
-    echo "Centos-based install"\r
-    sudo tee /etc/yum.repos.d/docker.repo <<-'EOF'\r
-[dockerrepo]\r
-name=Docker Repository\r
-baseurl=https://yum.dockerproject.org/repo/main/centos/7/\r
-enabled=1\r
-gpgcheck=1\r
-gpgkey=https://yum.dockerproject.org/gpg \r
-EOF\r
-    sudo yum install -y docker-engine\r
-    # xenial is needed for python 3.5\r
-    sudo docker pull ubuntu:xenial\r
-    sudo service docker start\r
-#    sudo docker run -it  -v ~/git/joid/ci/cloud/admin-openrc.sh:/root/admin-openrc.sh -v ~/cloudify/cloudify-setup.sh:/root/cloudify-setup.sh ubuntu:xenial /bin/bash\r
-    sudo docker run -i -t -d -v /tmp/cloudify/:/tmp/cloudify ubuntu:xenial /bin/bash\r
-    exit 0\r
-  fi\r
-else \r
-  if [ "$2" == "2" ]; then\r
-    echo "$0: Install dependencies - OS specific"\r
-    if [ "$dist" == "Ubuntu" ]; then\r
-      apt-get update\r
-      apt-get install -y python\r
-      apt-get install -y python-dev\r
-      apt-get install -y python-pip\r
-      apt-get install -y wget\r
-      apt-get install -y openssh-server\r
-      apt-get install -y git\r
-#    apt-get install -y apg git gcc python-dev libxml2 libxslt1-dev libzip-dev \r
-#    pip install --upgrade pip virtualenv setuptools pbr tox\r
-    fi\r
-  else \r
-    echo "usage: bash cloudify-setup.sh [ 1 || 2 ]"\r
-    echo "1: Initial setup of the docker container"\r
-    echo "2: Setup of the Cloudify Manager in the docker container"\r
-    exit 1\r
-  fi\r
-fi\r
-\r
-cd ~\r
-\r
-echo "$0: Install dependencies - generic"\r
-pip install --upgrade pip virtualenv\r
-\r
-echo "$0: Upgrage pip again - needs to be the latest version due to errors found in earlier testing"\r
-pip install --upgrade pip\r
-\r
-echo "$0: install python-openstackclient python-glanceclient"\r
-pip install --upgrade python-openstackclient python-glanceclient  python-neutronclient\r
-\r
-echo "$0: cleanup any previous install attempt"\r
-if [ -d "~/cloudify" ]; then rm -rf ~/cloudify; fi  \r
-if [ -d "~/cloudify-manager" ]; then rm -rf ~/cloudify-manager; fi  \r
-rm ~/get-cloudify.py\r
-\r
-echo "$0: Create virtualenv"\r
-virtualenv ~/cloudify/venv\r
-source ~/cloudify/venv/bin/activate\r
-\r
-echo "$0: Get Cloudify"\r
-wget http://gigaspaces-repository-eu.s3.amazonaws.com/org/cloudify3/get-cloudify.py\r
-python get-cloudify.py --upgrade\r
-\r
-echo "$0: Initialize Cloudify"\r
-cfy init\r
-\r
-echo "$0: Setup admin-openrc.sh"\r
-source /tmp/cloudify/admin-openrc.sh\r
-\r
-if [ "$1" == "cloudify-manager" ]; then\r
-  echo "$0: Prepare the Cloudify Manager prerequisites and data"\r
-  mkdir -p ~/cloudify-manager\r
-  cd ~/cloudify-manager\r
-  wget https://github.com/cloudify-cosmo/cloudify-manager-blueprints/archive/3.4.tar.gz\r
-  mv 3.4.tar.gz cloudify-manager-blueprints.tar.gz\r
-  tar -xzvf cloudify-manager-blueprints.tar.gz\r
-  cd cloudify-manager-blueprints-3.4\r
-\r
-  echo "$0: Setup keystone_username"\r
-  sed -i -- "s/keystone_username: ''/keystone_username: '$OS_USERNAME'/g" openstack-manager-blueprint-inputs.yaml\r
-\r
-  echo "$0: Setup keystone_password"\r
-  sed -i -- "s/keystone_password: ''/keystone_password: '$OS_PASSWORD'/g" openstack-manager-blueprint-inputs.yaml\r
-\r
-  echo "$0: Setup keystone_tenant_name"\r
-  sed -i -- "s/keystone_tenant_name: ''/keystone_tenant_name: '$OS_TENANT_NAME'/g" openstack-manager-blueprint-inputs.yaml\r
-\r
-  echo "$0: Setup keystone_url"\r
-  # Use ~ instead of / as regex delimeter, since this variable contains slashes\r
-  sed -i -- "s~keystone_url: ''~keystone_url: '$OS_AUTH_URL'~g" openstack-manager-blueprint-inputs.yaml\r
-\r
-  echo "$0: Setup region"\r
-  sed -i -- "s/region: ''/region: '$OS_REGION_NAME'/g" openstack-manager-blueprint-inputs.yaml\r
-\r
-  echo "$0: Setup manager_public_key_name"\r
-  sed -i -- "s/#manager_public_key_name: ''/manager_public_key_name: 'cloudify-manager'/g" openstack-manager-blueprint-inputs.yaml\r
-\r
-  echo "$0: Setup agent_public_key_name"\r
-  sed -i -- "s/#agent_public_key_name: ''/agent_public_key_name: 'cloudify-agent'/g" openstack-manager-blueprint-inputs.yaml\r
-\r
-  echo "$0: Setup image_id"\r
-  # CentOS-7-x86_64-GenericCloud.qcow2 failed to be routable (?), so changed to 1607 version\r
-  image=$(openstack image list | awk "/ CentOS-7-x86_64-GenericCloud-1607 / { 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
-  fi\r
-  image=$(openstack image list | awk "/ CentOS-7-x86_64-GenericCloud-1607 / { print \$2 }")\r
-  sed -i -- "s/image_id: ''/image_id: '$image'/g" openstack-manager-blueprint-inputs.yaml\r
-\r
-  echo "$0: Setup flavor_id"\r
-  flavor=$(nova flavor-show m1.large | awk "/ id / { print \$4 }")\r
-  sed -i -- "s/flavor_id: ''/flavor_id: '$flavor'/g" openstack-manager-blueprint-inputs.yaml\r
-\r
-  echo "$0: Setup external_network_name"\r
-  get_external_net\r
-  sed -i -- "s/external_network_name: ''/external_network_name: '$EXTERNAL_NETWORK_NAME'/g" openstack-manager-blueprint-inputs.yaml\r
-\r
-  # By default, only the cloudify-management-router is setup as DNS server, and it was failing to resolve internet domain names, which was blocking download of needed resources\r
-  echo "$0: Add nameservers"\r
-  sed -i -- "s/#management_subnet_dns_nameservers: \[\]/management_subnet_dns_nameservers: \[8.8.8.8\]/g" openstack-manager-blueprint-inputs.yaml\r
-\r
-  echo "$0: Bootstrap the manager"\r
-  cfy bootstrap --install-plugins --keep-up-on-failure --task-retries=10 -p openstack-manager-blueprint.yaml -i openstack-manager-blueprint-inputs.yaml\r
-\r
-  echo "$0: install needed packages to support blueprints 'not using managed plugins'"\r
-  # See https://cloudifysource.atlassian.net/browse/CFY-5050\r
-  cfy ssh -c "sudo yum install -y gcc gcc-c++ python-devel"\r
-else\r
-  echo "$0: Prepare the Cloudify CLI prerequisites and data"\r
-  cd /tmp/cloudify\r
-  git clone https://github.com/cloudify-cosmo/cloudify-openstack-plugin.git            \r
-  cd cloudify-openstack-plugin\r
-\r
-  echo "Create management network"\r
-  if [ $(neutron net-list | awk "/ cloudify_mgmt / { print \$2 }") ]; then\r
-    echo "$0: cloudify_mgmt network exists"\r
-  else\r
-    neutron net-create cloudify_mgmt           \r
-    echo "$0: Create management subnet"\r
-    neutron subnet-create cloudify_mgmt 10.0.0.0/24 --name cloudify_mgmt --gateway 10.0.0.1 --enable-dhcp --allocation-pool start=10.0.0.2,end=10.0.0.254 --dns-nameserver 8.8.8.8\r
-  fi\r
-\r
-  echo "$0: Create router for cloudify_mgmt network"\r
-  neutron router-create cloudify_mgmt_router\r
-\r
-  echo "$0: Create router gateway for cloudify_mgmt network"\r
-  neutron router-gateway-set cloudify_mgmt_router $EXTERNAL_NETWORK_NAME\r
-\r
-  echo "$0: Add router interface for cloudify_mgmt network"\r
-  neutron router-interface-add cloudify_mgmt_router subnet=cloudify_mgmt\r
-               \r
-  echo "$0: Patch plugin.yaml to reference management network"\r
-  sed -i -- "s/management_network_name:\n        default: ''/management_network_name:\n        default: 'cloudify_mgmt'/" /tmp/cloudify/cloudify-openstack-plugin/plugin.yaml\r
-               \r
-  python setup.py build\r
-  python setup.py install\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: Setup script for the Cloudify Manager starting from an
+# Unbuntu Xenial docker container.
+#
+# Status: this is a work in progress, under test.
+#
+# How to use:
+#   $ bash cloudify-setup.sh [cloudify-cli|cloudify-manager] [ 1 || 2 ]
+#   cloudify-cli: use Cloudify CLI
+#   cloudify-manager: use Cloudify Manager
+#   1: Initial setup of the docker container
+#   2: Setup of the Cloudify Manager in the docker container
+
+function setenv () {
+if [ "$dist" == "Ubuntu" ]; then
+  echo "$0: Ubuntu-based install"
+  echo "$0: Create the environment file"
+  KEYSTONE_HOST=$(juju status --format=short | awk "/keystone\/0/ { print \$3 }")
+  cat <<EOF >/tmp/cloudify/admin-openrc.sh
+export CONGRESS_HOST=$(juju status --format=short | awk "/openstack-dashboard/ { print \$3 }")
+export HORIZON_HOST=$(juju status --format=short | awk "/openstack-dashboard/ { print \$3 }")
+export KEYSTONE_HOST=$KEYSTONE_HOST
+export CEILOMETER_HOST=$(juju status --format=short | awk "/ceilometer\/0/ { print \$3 }")
+export CINDER_HOST=$(juju status --format=short | awk "/cinder\/0/ { print \$3 }")
+export GLANCE_HOST=$(juju status --format=short | awk "/glance\/0/ { print \$3 }")
+export NEUTRON_HOST=$(juju status --format=short | awk "/neutron-api\/0/ { print \$3 }")
+export NOVA_HOST=$(juju status --format=short | awk "/nova-cloud-controller\/0/ { print \$3 }")
+export OS_USERNAME=admin
+export OS_PASSWORD=openstack
+export OS_TENANT_NAME=admin
+export OS_AUTH_URL=http://$KEYSTONE_HOST:5000/v2.0
+export OS_REGION_NAME=RegionOne
+EOF
+else
+  # Centos
+  echo "$0: Centos-based install"
+  echo "$0: Setup undercloud environment so we can get overcloud Controller server address"
+  source ~/stackrc
+  echo "$0: Get address of Controller node"
+  export CONTROLLER_HOST1=$(openstack server list | awk "/overcloud-controller-0/ { print \$8 }" | sed 's/ctlplane=//g')
+  echo "$0: Create the environment file"
+  cat <<EOF >/tmp/cloudify/admin-openrc.sh
+export CONGRESS_HOST=$CONTROLLER_HOST1
+export KEYSTONE_HOST=$CONTROLLER_HOST1
+export CEILOMETER_HOST=$CONTROLLER_HOST1
+export CINDER_HOST=$CONTROLLER_HOST1
+export GLANCE_HOST=$CONTROLLER_HOST1
+export NEUTRON_HOST=$CONTROLLER_HOST1
+export NOVA_HOST=$CONTROLLER_HOST1
+EOF
+  cat ~/overcloudrc >>/tmp/cloudify/admin-openrc.sh
+  source ~/overcloudrc
+  export OS_REGION_NAME=$(openstack endpoint list | awk "/ nova / { print \$4 }")
+  # sed command below is a workaound for a bug - region shows up twice for some reason
+  cat <<EOF | sed '$d' >>/tmp/cloudify/admin-openrc.sh
+export OS_REGION_NAME=$OS_REGION_NAME
+EOF
+fi
+source /tmp/cloudify/admin-openrc.sh
+}
+
+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=$(openstack network show $ext_net_id | awk "/ name / { print \$4 }")
+    EXTERNAL_SUBNET_ID=$(openstack network show $EXTERNAL_NETWORK_NAME | awk "/ subnets / { print \$4 }")
+  else
+    echo "$0: External network not found"
+    exit 1
+  fi
+}
+
+dist=`grep DISTRIB_ID /etc/*-release | awk -F '=' '{print $2}'`
+if [ "$2" == "1" ]; then
+  echo "$0: Copy this script to /tmp/cloudify"
+       mkdir /tmp/cloudify
+  cp $0 /tmp/cloudify/.
+  chmod 755 /tmp/cloudify/*.sh
+
+  echo "$0: Setup admin-openrc.sh"
+  setenv
+  echo "$0: Setup container"
+  if [ "$dist" == "Ubuntu" ]; then
+    # xenial is needed for python 3.5
+    sudo docker pull ubuntu:xenial
+    sudo service docker start
+#    sudo docker run -it  -v ~/git/joid/ci/cloud/admin-openrc.sh:/root/admin-openrc.sh -v ~/cloudify/cloudify-setup.sh:/root/cloudify-setup.sh ubuntu:xenial /bin/bash
+    sudo docker run -it -d -v /tmp/cloudify/:/tmp/cloudify ubuntu:xenial /bin/bash
+    exit 0
+       else 
+    # Centos
+    echo "Centos-based install"
+    sudo tee /etc/yum.repos.d/docker.repo <<-'EOF'
+[dockerrepo]
+name=Docker Repository
+baseurl=https://yum.dockerproject.org/repo/main/centos/7/
+enabled=1
+gpgcheck=1
+gpgkey=https://yum.dockerproject.org/gpg 
+EOF
+    sudo yum install -y docker-engine
+    # xenial is needed for python 3.5
+    sudo docker pull ubuntu:xenial
+    sudo service docker start
+#    sudo docker run -it  -v ~/git/joid/ci/cloud/admin-openrc.sh:/root/admin-openrc.sh -v ~/cloudify/cloudify-setup.sh:/root/cloudify-setup.sh ubuntu:xenial /bin/bash
+    sudo docker run -i -t -d -v /tmp/cloudify/:/tmp/cloudify ubuntu:xenial /bin/bash
+    exit 0
+  fi
+else 
+  if [ "$2" == "2" ]; then
+    echo "$0: Install dependencies - OS specific"
+    if [ "$dist" == "Ubuntu" ]; then
+      apt-get update
+      apt-get install -y python
+      apt-get install -y python-dev
+      apt-get install -y python-pip
+      apt-get install -y wget
+      apt-get install -y openssh-server
+      apt-get install -y git
+#    apt-get install -y apg git gcc python-dev libxml2 libxslt1-dev libzip-dev 
+#    pip install --upgrade pip virtualenv setuptools pbr tox
+    fi
+  else 
+    echo "usage: bash cloudify-setup.sh [ 1 || 2 ]"
+    echo "1: Initial setup of the docker container"
+    echo "2: Setup of the Cloudify Manager in the docker container"
+    exit 1
+  fi
+fi
+
+cd ~
+
+echo "$0: Install dependencies - generic"
+pip install --upgrade pip virtualenv
+
+echo "$0: Upgrage pip again - needs to be the latest version due to errors found in earlier testing"
+pip install --upgrade pip
+
+echo "$0: install python-openstackclient python-glanceclient"
+pip install --upgrade python-openstackclient python-glanceclient  python-neutronclient
+
+echo "$0: cleanup any previous install attempt"
+if [ -d "~/cloudify" ]; then rm -rf ~/cloudify; fi  
+if [ -d "~/cloudify-manager" ]; then rm -rf ~/cloudify-manager; fi  
+rm ~/get-cloudify.py
+
+echo "$0: Create virtualenv"
+virtualenv ~/cloudify/venv
+source ~/cloudify/venv/bin/activate
+
+echo "$0: Get Cloudify"
+wget http://gigaspaces-repository-eu.s3.amazonaws.com/org/cloudify3/get-cloudify.py
+python get-cloudify.py --upgrade
+
+echo "$0: Initialize Cloudify"
+cfy init
+
+echo "$0: Setup admin-openrc.sh"
+source /tmp/cloudify/admin-openrc.sh
+
+if [ "$1" == "cloudify-manager" ]; then
+  echo "$0: Prepare the Cloudify Manager prerequisites and data"
+  mkdir -p ~/cloudify-manager
+  cd ~/cloudify-manager
+  wget https://github.com/cloudify-cosmo/cloudify-manager-blueprints/archive/3.4.tar.gz
+  mv 3.4.tar.gz cloudify-manager-blueprints.tar.gz
+  tar -xzvf cloudify-manager-blueprints.tar.gz
+  cd cloudify-manager-blueprints-3.4
+
+  echo "$0: Setup keystone_username"
+  sed -i -- "s/keystone_username: ''/keystone_username: '$OS_USERNAME'/g" openstack-manager-blueprint-inputs.yaml
+
+  echo "$0: Setup keystone_password"
+  sed -i -- "s/keystone_password: ''/keystone_password: '$OS_PASSWORD'/g" openstack-manager-blueprint-inputs.yaml
+
+  echo "$0: Setup keystone_tenant_name"
+  sed -i -- "s/keystone_tenant_name: ''/keystone_tenant_name: '$OS_TENANT_NAME'/g" openstack-manager-blueprint-inputs.yaml
+
+  echo "$0: Setup keystone_url"
+  # Use ~ instead of / as regex delimeter, since this variable contains slashes
+  sed -i -- "s~keystone_url: ''~keystone_url: '$OS_AUTH_URL'~g" openstack-manager-blueprint-inputs.yaml
+
+  echo "$0: Setup region"
+  sed -i -- "s/region: ''/region: '$OS_REGION_NAME'/g" openstack-manager-blueprint-inputs.yaml
+
+  echo "$0: Setup manager_public_key_name"
+  sed -i -- "s/#manager_public_key_name: ''/manager_public_key_name: 'cloudify-manager'/g" openstack-manager-blueprint-inputs.yaml
+
+  echo "$0: Setup agent_public_key_name"
+  sed -i -- "s/#agent_public_key_name: ''/agent_public_key_name: 'cloudify-agent'/g" openstack-manager-blueprint-inputs.yaml
+
+  echo "$0: Setup image_id"
+  # CentOS-7-x86_64-GenericCloud.qcow2 failed to be routable (?), so changed to 1607 version
+  image=$(openstack image list | awk "/ CentOS-7-x86_64-GenericCloud-1607 / { 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
+  fi
+  image=$(openstack image list | awk "/ CentOS-7-x86_64-GenericCloud-1607 / { print \$2 }")
+  sed -i -- "s/image_id: ''/image_id: '$image'/g" openstack-manager-blueprint-inputs.yaml
+
+  echo "$0: Setup flavor_id"
+  flavor=$(nova flavor-show m1.large | awk "/ id / { print \$4 }")
+  sed -i -- "s/flavor_id: ''/flavor_id: '$flavor'/g" openstack-manager-blueprint-inputs.yaml
+
+  echo "$0: Setup external_network_name"
+  get_external_net
+  sed -i -- "s/external_network_name: ''/external_network_name: '$EXTERNAL_NETWORK_NAME'/g" openstack-manager-blueprint-inputs.yaml
+
+  # By default, only the cloudify-management-router is setup as DNS server, and it was failing to resolve internet domain names, which was blocking download of needed resources
+  echo "$0: Add nameservers"
+  sed -i -- "s/#management_subnet_dns_nameservers: \[\]/management_subnet_dns_nameservers: \[8.8.8.8\]/g" openstack-manager-blueprint-inputs.yaml
+
+  echo "$0: Bootstrap the manager"
+  cfy bootstrap --install-plugins --keep-up-on-failure --task-retries=10 -p openstack-manager-blueprint.yaml -i openstack-manager-blueprint-inputs.yaml
+
+  echo "$0: install needed packages to support blueprints 'not using managed plugins'"
+  # See https://cloudifysource.atlassian.net/browse/CFY-5050
+  cfy ssh -c "sudo yum install -y gcc gcc-c++ python-devel"
+else
+  echo "$0: Prepare the Cloudify CLI prerequisites and data"
+  cd /tmp/cloudify
+  git clone https://github.com/cloudify-cosmo/cloudify-openstack-plugin.git            
+  cd cloudify-openstack-plugin
+
+  echo "Create management network"
+  if [ $(neutron net-list | awk "/ cloudify_mgmt / { print \$2 }") ]; then
+    echo "$0: cloudify_mgmt network exists"
+  else
+    neutron net-create cloudify_mgmt           
+    echo "$0: Create management subnet"
+    neutron subnet-create cloudify_mgmt 10.0.0.0/24 --name cloudify_mgmt --gateway 10.0.0.1 --enable-dhcp --allocation-pool start=10.0.0.2,end=10.0.0.254 --dns-nameserver 8.8.8.8
+  fi
+
+  echo "$0: Create router for cloudify_mgmt network"
+  neutron router-create cloudify_mgmt_router
+
+  echo "$0: Create router gateway for cloudify_mgmt network"
+  neutron router-gateway-set cloudify_mgmt_router $EXTERNAL_NETWORK_NAME
+
+  echo "$0: Add router interface for cloudify_mgmt network"
+  neutron router-interface-add cloudify_mgmt_router subnet=cloudify_mgmt
+               
+  echo "$0: Patch plugin.yaml to reference management network"
+  sed -i -- "s/management_network_name:\n        default: ''/management_network_name:\n        default: 'cloudify_mgmt'/" /tmp/cloudify/cloudify-openstack-plugin/plugin.yaml
+               
+  python setup.py build
+  python setup.py install
+fi
index 4b49f41..c9bc995 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 "vHello.sh: Floating network not found"\r
-    exit 1\r
-  fi\r
-}\r
-\r
-select_manager() {\r
-  echo "vHello.sh: 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 "vHello.sh: 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 "vHello.sh: clone cloudify-hello-world-example"\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
-\r
-  echo "vHello.sh: setup OpenStack CLI environment"\r
-  source /tmp/cloudify/admin-openrc.sh\r
-\r
-  echo "vHello.sh: 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\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
-  echo "vHello.sh: create 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
-\r
-  if [[ "$1" == "cloudify-cli" ]]; then \r
-    # Workarounds for error in allocating floating IP \r
-    # Workflow failed: Task failed 'neutron_plugin.floatingip.create' -> Failed to parse request. Required attribute 'floating_network_id' not specified [status_code=400]\r
-    get_floating_net\r
-\r
-    echo "vHello.sh: update blueprint with parameters needed for Cloudify CLI use"\r
-    cat <<EOF >>vHello-inputs.yaml\r
-external_network_name: $floating_network_name\r
-EOF\r
-\r
-    sed -i -- 's/description: Openstack flavor name or id to use for the new server/description: Openstack flavor name or id to use for the new server\n  external_network_name:\n    description: External network name/g' cloudify-hello-world-example/blueprint.yaml\r
-\r
-    sed -i -- 's/type: cloudify.openstack.nodes.FloatingIP/type: cloudify.openstack.nodes.FloatingIP\n    properties:\n      floatingip:\n        floating_network_name: { get_input: external_network_name }/g' cloudify-hello-world-example/blueprint.yaml\r
-\r
-    echo "vHello.sh: 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
-# Workarounds for error in allocating keypair\r
-# Task failed 'nova_plugin.server.create' -> server must have a keypair, yet no keypair was connected to the server node, the "key_name" nested property wasn't used, and there is no agent keypair in the provider context\r
-# Tried the following but keypair is not supported by http://www.getcloudify.org/spec/openstack-plugin/1.4/plugin.yaml\r
-#    sed -i -- 's/target: security_group/target: security_group\n      - type: cloudify.openstack.server_connected_to_keypair\n        target: keypair/g' cloudify-hello-world-example/blueprint.yaml\r
-#    sed -i -- 's/description: External network name/description: External network name\n  private_key_path:\n    description: Path to private key/g' cloudify-hello-world-example/blueprint.yaml\r
-#    sed -i -- '0,/interfaces:/s//interfaces:\n      cloudify.interfaces.lifecycle:\n        start:\n          implementation: openstack.nova_plugin.server.start\n          inputs:\n            private_key_path:  { get_input: private_key_path }/' cloudify-hello-world-example/blueprint.yaml\r
-\r
-# 'key_name' is a subproperty of 'server' per test-start-operation-retry-blueprint.yaml in the cloudify-openstack-plugin repo\r
-    sed -i -- 's/description: External network name/description: External network name\n  key_name:\n    description: Name of private key/g' cloudify-hello-world-example/blueprint.yaml\r
-\r
-    sed -i -- 's/flavor: { get_input: flavor }/flavor: { get_input: flavor }\n      server:\n        key_name:  { get_input: key_name }/' cloudify-hello-world-example/blueprint.yaml\r
-\r
-    echo "vHello.sh: update blueprint with parameters needed for Cloudify CLI use"\r
-    #private_key_path: /root/.ssh/vHello.pem\r
-    cat <<EOF >>vHello-inputs.yaml\r
-key_name: vHello\r
-EOF\r
-\r
-  echo "vHello.sh: disable cloudify agent install in blueprint"\r
-  sed -i -- ':a;N;$!ba;s/  agent_user:\n    description: User name used when SSH-ing into the started machine\n//g' cloudify-hello-world-example/blueprint.yaml\r
-  sed -i -- ':a;N;$!ba;s/agent_config:\n        user: { get_input: agent_user }/install_agent: false/' cloudify-hello-world-example/blueprint.yaml\r
-  sed -i -- ':a;N;$!ba;s/agent_user: centos\n//' vHello-inputs.yaml \r
-  fi\r
-\r
-  echo "vHello.sh: activate cloudify Virtualenv"\r
-  source ~/cloudify/venv/bin/activate\r
-\r
-  echo "vHello.sh: initialize cloudify environment"\r
-  cd /tmp/cloudify/blueprints\r
-  cfy init -r\r
-\r
-  if [[ "$1" == "cloudify-manager" ]]; then \r
-    select_manager\r
-    echo "vHello.sh: 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 "vHello.sh: 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 "vHello.sh: 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 "vHello.sh: get vHello server address"\r
-    SERVER_URL=$(cfy deployments outputs -d vHello | awk "/ Value: / { print \$2 }")\r
-  else \r
-    echo "vHello.sh: install local blueprint"\r
-    cfy local install --install-plugins -i vHello-inputs.yaml -p cloudify-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
-#    cfy local install replaces the following, per http://getcloudify.org/2016/04/07/cloudify-update-from-developers-features-improvements-open-source-python-devops.html\r
-#    cfy local init --install-plugins -i vHello-inputs.yaml -p cloudify-hello-world-example/blueprint.yaml \r
-#    cfy local execute -w install\r
-#    Not sure if needed\r
-#    cfy local create-requirements -p cloudify-hello-world-example/blueprint.yaml\r
-#    if [ $? -eq 1 ]; then fail; fi\r
-\r
-    echo "vHello.sh: get vHello server address"\r
-    SERVER_URL=$(cfy local outputs | awk "/http_endpoint/ { print \$2 }")\r
-  fi\r
-\r
-  echo "vHello.sh: 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 "vHello.sh: activate cloudify Virtualenv"\r
-  source ~/cloudify/venv/bin/activate\r
-\r
-  echo "vHello.sh: setup OpenStack CLI environment"\r
-  source /tmp/cloudify/admin-openrc.sh\r
-\r
-  echo "vHello.sh: initialize cloudify environment"\r
-  cd /tmp/cloudify/blueprints\r
-\r
- if [[ "$1" == "cloudify-manager" ]]; then \r
-    select_manager\r
-    echo "vHello.sh: uninstall vHello blueprint via manager"\r
-    cfy executions start -w uninstall -d vHello\r
-    if [ $? -eq 1 ]; then fail; fi\r
-\r
-    echo "vHello.sh: delete vHello blueprint"\r
-    cfy deployments delete -d vHello\r
-    if [ $? -eq 1 ]; then fail; fi\r
-  else \r
-    echo "vHello.sh: 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 "vHello.sh: 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 "vHello.sh: cloudify-setup part 1"\r
-  bash utils/cloudify-setup.sh $1 1\r
-\r
-  echo "vHello.sh: cloudify-setup part 2"\r
-  CONTAINER=$(sudo docker ps -l | awk "/ ubuntu:xenial / { print \$1 }")\r
-  sudo docker exec $CONTAINER /tmp/cloudify/cloudify-setup.sh $1 2\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 "vHello.sh: pass $2 command to vHello.sh in cloudify container"\r
-    CONTAINER=$(sudo docker ps -l | awk "/ ubuntu:xenial / { 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 "vHello.sh: Floating network not found"
+    exit 1
+  fi
+}
+
+select_manager() {
+  echo "vHello.sh: 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 "vHello.sh: 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 "vHello.sh: clone cloudify-hello-world-example"
+  git clone https://github.com/cloudify-cosmo/cloudify-hello-world-example.git
+  cd cloudify-hello-world-example
+  git checkout 3.4.1-build
+
+  echo "vHello.sh: setup OpenStack CLI environment"
+  source /tmp/cloudify/admin-openrc.sh
+
+  echo "vHello.sh: 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
+  fi
+# image=$(openstack image list | awk "/ CentOS-7-x86_64-GenericCloud-1607 / { print \$2 }")
+  image=$(openstack image list | awk "/ xenial-server / { print \$2 }")
+       
+  echo "vHello.sh: create 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
+
+  if [[ "$1" == "cloudify-cli" ]]; then 
+    # Workarounds for error in allocating floating IP 
+    # Workflow failed: Task failed 'neutron_plugin.floatingip.create' -> Failed to parse request. Required attribute 'floating_network_id' not specified [status_code=400]
+    get_floating_net
+
+    echo "vHello.sh: update blueprint with parameters needed for Cloudify CLI use"
+    cat <<EOF >>vHello-inputs.yaml
+external_network_name: $floating_network_name
+EOF
+
+    sed -i -- 's/description: Openstack flavor name or id to use for the new server/description: Openstack flavor name or id to use for the new server\n  external_network_name:\n    description: External network name/g' cloudify-hello-world-example/blueprint.yaml
+
+    sed -i -- 's/type: cloudify.openstack.nodes.FloatingIP/type: cloudify.openstack.nodes.FloatingIP\n    properties:\n      floatingip:\n        floating_network_name: { get_input: external_network_name }/g' cloudify-hello-world-example/blueprint.yaml
+
+    echo "vHello.sh: Create Nova key pair"
+    mkdir -p ~/.ssh
+    nova keypair-delete vHello
+    nova keypair-add vHello > ~/.ssh/vHello.pem
+    chmod 600 ~/.ssh/vHello.pem
+
+# Workarounds for error in allocating keypair
+# Task failed 'nova_plugin.server.create' -> server must have a keypair, yet no keypair was connected to the server node, the "key_name" nested property wasn't used, and there is no agent keypair in the provider context
+# Tried the following but keypair is not supported by http://www.getcloudify.org/spec/openstack-plugin/1.4/plugin.yaml
+#    sed -i -- 's/target: security_group/target: security_group\n      - type: cloudify.openstack.server_connected_to_keypair\n        target: keypair/g' cloudify-hello-world-example/blueprint.yaml
+#    sed -i -- 's/description: External network name/description: External network name\n  private_key_path:\n    description: Path to private key/g' cloudify-hello-world-example/blueprint.yaml
+#    sed -i -- '0,/interfaces:/s//interfaces:\n      cloudify.interfaces.lifecycle:\n        start:\n          implementation: openstack.nova_plugin.server.start\n          inputs:\n            private_key_path:  { get_input: private_key_path }/' cloudify-hello-world-example/blueprint.yaml
+
+# 'key_name' is a subproperty of 'server' per test-start-operation-retry-blueprint.yaml in the cloudify-openstack-plugin repo
+    sed -i -- 's/description: External network name/description: External network name\n  key_name:\n    description: Name of private key/g' cloudify-hello-world-example/blueprint.yaml
+
+    sed -i -- 's/flavor: { get_input: flavor }/flavor: { get_input: flavor }\n      server:\n        key_name:  { get_input: key_name }/' cloudify-hello-world-example/blueprint.yaml
+
+    echo "vHello.sh: update blueprint with parameters needed for Cloudify CLI use"
+    #private_key_path: /root/.ssh/vHello.pem
+    cat <<EOF >>vHello-inputs.yaml
+key_name: vHello
+EOF
+
+  echo "vHello.sh: disable cloudify agent install in blueprint"
+  sed -i -- ':a;N;$!ba;s/  agent_user:\n    description: User name used when SSH-ing into the started machine\n//g' cloudify-hello-world-example/blueprint.yaml
+  sed -i -- ':a;N;$!ba;s/agent_config:\n        user: { get_input: agent_user }/install_agent: false/' cloudify-hello-world-example/blueprint.yaml
+  sed -i -- ':a;N;$!ba;s/agent_user: centos\n//' vHello-inputs.yaml 
+  fi
+
+  echo "vHello.sh: activate cloudify Virtualenv"
+  source ~/cloudify/venv/bin/activate
+
+  echo "vHello.sh: initialize cloudify environment"
+  cd /tmp/cloudify/blueprints
+  cfy init -r
+
+  if [[ "$1" == "cloudify-manager" ]]; then 
+    select_manager
+    echo "vHello.sh: 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 "vHello.sh: 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 "vHello.sh: execute 'install' workflow for vHello deployment via manager"
+    cfy executions start -w install -d vHello --timeout 1800
+    if [ $? -eq 1 ]; then fail; fi
+
+    echo "vHello.sh: get vHello server address"
+    SERVER_URL=$(cfy deployments outputs -d vHello | awk "/ Value: / { print \$2 }")
+  else 
+    echo "vHello.sh: install local blueprint"
+    cfy local install --install-plugins -i vHello-inputs.yaml -p cloudify-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
+#    cfy local install replaces the following, per http://getcloudify.org/2016/04/07/cloudify-update-from-developers-features-improvements-open-source-python-devops.html
+#    cfy local init --install-plugins -i vHello-inputs.yaml -p cloudify-hello-world-example/blueprint.yaml 
+#    cfy local execute -w install
+#    Not sure if needed
+#    cfy local create-requirements -p cloudify-hello-world-example/blueprint.yaml
+#    if [ $? -eq 1 ]; then fail; fi
+
+    echo "vHello.sh: get vHello server address"
+    SERVER_URL=$(cfy local outputs | awk "/http_endpoint/ { print \$2 }")
+  fi
+
+  echo "vHello.sh: 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 "vHello.sh: activate cloudify Virtualenv"
+  source ~/cloudify/venv/bin/activate
+
+  echo "vHello.sh: setup OpenStack CLI environment"
+  source /tmp/cloudify/admin-openrc.sh
+
+  echo "vHello.sh: initialize cloudify environment"
+  cd /tmp/cloudify/blueprints
+
+ if [[ "$1" == "cloudify-manager" ]]; then 
+    select_manager
+    echo "vHello.sh: uninstall vHello blueprint via manager"
+    cfy executions start -w uninstall -d vHello
+    if [ $? -eq 1 ]; then fail; fi
+
+    echo "vHello.sh: delete vHello blueprint"
+    cfy deployments delete -d vHello
+    if [ $? -eq 1 ]; then fail; fi
+  else 
+    echo "vHello.sh: uninstall vHello blueprint via CLI"
+    cfy local uninstall
+    if [ $? -eq 1 ]; then fail; fi
+  fi
+  pass
+}
+
+if [[ "$2" == "setup" ]]; then
+  echo "vHello.sh: 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 "vHello.sh: cloudify-setup part 1"
+  bash utils/cloudify-setup.sh $1 1
+
+  echo "vHello.sh: cloudify-setup part 2"
+  CONTAINER=$(sudo docker ps -l | awk "/ ubuntu:xenial / { print \$1 }")
+  sudo docker exec $CONTAINER /tmp/cloudify/cloudify-setup.sh $1 2
+  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 "vHello.sh: pass $2 command to vHello.sh in cloudify container"
+    CONTAINER=$(sudo docker ps -l | awk "/ ubuntu:xenial / { print \$1 }")
+    sudo docker exec $CONTAINER /tmp/cloudify/vHello.sh $1 $2 $2
+    if [ $? -eq 1 ]; then fail; fi
+    pass
+  fi
+fi