summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMarkos Chandras <mchandras@suse.de>2017-12-12 09:44:07 +0000
committerMarkos Chandras <mchandras@suse.de>2017-12-15 09:49:49 +0000
commit8128163000b2c12c39759ac5f3146bf7d2407220 (patch)
tree3c56cbe7cc710c17ea66a3e55bbcac2a2c90a5c9
parent39d9f4db802ade0b8be8216ae124b1f42f7a7a78 (diff)
xci: Move OpenStack-Ansible out of the main script
In preparation for supporting more NFVIs in XCI, we need to make the main script NFVI agnostic. Right now, our NFVI is being deployed using bifrost+OSA so we keep bifrost in the main script since the hardware provisioning is NFVI agnostic (at least for now) but we move OSA to its own directory. This should allow more NFVI to plug into XCI by simply providing a nfvi-deploy.sh script. The user can select the preferred NFVI using the XCI_NFVI variable. Change-Id: Ieeacd3b22a64d363feff5d43ff23a80c39038837 Signed-off-by: Markos Chandras <mchandras@suse.de>
-rwxr-xr-xxci/config/user-vars1
-rwxr-xr-xxci/nfvi/osa/nfvi-deploy.sh196
-rwxr-xr-xxci/xci-deploy.sh189
3 files changed, 204 insertions, 182 deletions
diff --git a/xci/config/user-vars b/xci/config/user-vars
index e5cb1fbf..2d1743a2 100755
--- a/xci/config/user-vars
+++ b/xci/config/user-vars
@@ -22,6 +22,7 @@
#-------------------------------------------------------------------------------
export XCI_FLAVOR=${XCI_FLAVOR:-aio}
export XCI_CEPH_ENABLED=${XCI_CEPH_ENABLED:-false}
+export XCI_NFVI=${XCI_NFVI:-osa}
#-------------------------------------------------------------------------------
# Configure some other stuff
diff --git a/xci/nfvi/osa/nfvi-deploy.sh b/xci/nfvi/osa/nfvi-deploy.sh
new file mode 100755
index 00000000..f1d1af32
--- /dev/null
+++ b/xci/nfvi/osa/nfvi-deploy.sh
@@ -0,0 +1,196 @@
+#!/bin/bash
+# SPDX-license-identifier: Apache-2.0
+##############################################################################
+# Copyright (c) 2017 SUSE LINUX GmbH.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Apache License, Version 2.0
+# which accompanies this distribution, and is available at
+# http://www.apache.org/licenses/LICENSE-2.0
+##############################################################################
+
+if [[ ${OPENSTACK_OSA_VERSION} =~ "stable/" ]]; then
+ echo ""
+ echo "+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++"
+ echo "WARNING: We have detected that you are trying to use a stable OpenStack-Ansible."
+ echo "This will likely not work because, unless you know what you are doing, you are going"
+ echo "to be mixing roles and services from the master branch with a stable OpenStack-Ansible."
+ echo "This is _NOT_ supported in any way but we can try to make it work for you."
+ echo "Either way you are on your own so please do not report bugs as they will be considered invalid."
+ echo "+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++"
+ echo ""
+ sleep 15
+ trap - ERR
+ ${XCI_PATH}/xci/scripts/update-osa-version-files.sh ${OPENSTACK_OSA_VERSION}
+fi
+
+#-------------------------------------------------------------------------------
+# Configure localhost
+#-------------------------------------------------------------------------------
+# This playbook
+# - removes directories that were created by the previous xci run
+# - clones opnfv/releng-xci repository
+# - creates log directory
+# - copies flavor files such as playbook, inventory, and var file
+#-------------------------------------------------------------------------------
+
+echo "Info: Configuring localhost for openstack-ansible"
+echo "-----------------------------------------------------------------------"
+cd $XCI_PLAYBOOKS
+ansible-playbook ${XCI_ANSIBLE_VERBOSITY} -i inventory configure-localhost.yml
+echo "-----------------------------------------------------------------------"
+echo "Info: Configured localhost host for openstack-ansible"
+
+#-------------------------------------------------------------------------------
+# Configure openstack-ansible deployment host, opnfv
+#-------------------------------------------------------------------------------
+# This playbook
+# - removes directories that were created by the previous xci run
+# - clones opnfv/releng-xci and openstack/openstack-ansible repositories
+# - configures network
+# - generates/prepares ssh keys
+# - bootstraps ansible
+# - copies flavor files to be used by openstack-ansible
+#-------------------------------------------------------------------------------
+echo "Info: Configuring opnfv deployment host for openstack-ansible"
+echo "-----------------------------------------------------------------------"
+cd $XCI_PLAYBOOKS
+ansible-playbook ${XCI_ANSIBLE_VERBOSITY} -i ${XCI_FLAVOR_ANSIBLE_FILE_PATH}/inventory \
+ configure-opnfvhost.yml
+echo "-----------------------------------------------------------------------"
+echo "Info: Configured opnfv deployment host for openstack-ansible"
+
+#-------------------------------------------------------------------------------
+# Configure target hosts for openstack-ansible
+#-------------------------------------------------------------------------------
+# This playbook is only run for the all flavors except aio since aio is configured
+# by an upstream script.
+
+# This playbook
+# - adds public keys to target hosts
+# - configures network
+# - configures nfs
+#-------------------------------------------------------------------------------
+if [[ $XCI_FLAVOR != "aio" ]]; then
+ echo "Info: Configuring target hosts for openstack-ansible"
+ echo "-----------------------------------------------------------------------"
+ cd $XCI_PLAYBOOKS
+ ansible-playbook ${XCI_ANSIBLE_VERBOSITY} -i ${XCI_FLAVOR_ANSIBLE_FILE_PATH}/inventory \
+ configure-targethosts.yml
+ echo "-----------------------------------------------------------------------"
+ echo "Info: Configured target hosts"
+fi
+
+#-------------------------------------------------------------------------------
+# Set up target hosts for openstack-ansible
+#-------------------------------------------------------------------------------
+# This is openstack-ansible playbook. Check upstream documentation for details.
+#-------------------------------------------------------------------------------
+echo "Info: Setting up target hosts for openstack-ansible"
+echo "-----------------------------------------------------------------------"
+ssh root@$OPNFV_HOST_IP "openstack-ansible ${XCI_ANSIBLE_VERBOSITY} \
+ releng-xci/.cache/repos/openstack-ansible/playbooks/setup-hosts.yml | tee setup-hosts.log "
+scp root@$OPNFV_HOST_IP:~/setup-hosts.log $LOG_PATH/setup-hosts.log
+echo "-----------------------------------------------------------------------"
+echo "Info: Set up target hosts for openstack-ansible successfuly"
+
+# TODO: Check this with the upstream and issue a fix in the documentation if the
+# problem is valid.
+#-------------------------------------------------------------------------------
+# Gather facts for all the hosts and containers
+#-------------------------------------------------------------------------------
+# This is needed in order to gather the facts for containers due to a change in
+# upstream that changed the hosts fact are gathered which causes failures during
+# running setup-infrastructure.yml playbook due to lack of the facts for lxc
+# containers.
+#
+# OSA gate also executes this command. See the link
+# http://logs.openstack.org/64/494664/1/check/gate-openstack-ansible-openstack-ansible-aio-ubuntu-xenial/2a0700e/console.html
+#-------------------------------------------------------------------------------
+echo "Info: Gathering facts"
+echo "-----------------------------------------------------------------------"
+ssh root@$OPNFV_HOST_IP "cd releng-xci/.cache/repos/openstack-ansible/playbooks; \
+ ansible ${XCI_ANSIBLE_VERBOSITY} -m setup -a gather_subset=network,hardware,virtual all"
+echo "-----------------------------------------------------------------------"
+
+#-------------------------------------------------------------------------------
+# Set up infrastructure
+#-------------------------------------------------------------------------------
+# This is openstack-ansible playbook. Check upstream documentation for details.
+#-------------------------------------------------------------------------------
+echo "Info: Setting up infrastructure"
+echo "-----------------------------------------------------------------------"
+echo "xci: running ansible playbook setup-infrastructure.yml"
+ssh root@$OPNFV_HOST_IP "openstack-ansible ${XCI_ANSIBLE_VERBOSITY} \
+ releng-xci/.cache/repos/openstack-ansible/playbooks/setup-infrastructure.yml | tee setup-infrastructure.log"
+scp root@$OPNFV_HOST_IP:~/setup-infrastructure.log $LOG_PATH/setup-infrastructure.log
+echo "-----------------------------------------------------------------------"
+# check the log to see if we have any error
+if grep -q 'failed=1\|unreachable=1' $LOG_PATH/setup-infrastructure.log; then
+ echo "Error: OpenStack node setup failed!"
+ exit 1
+fi
+
+#-------------------------------------------------------------------------------
+# Verify database cluster
+#-------------------------------------------------------------------------------
+echo "Info: Verifying database cluster"
+echo "-----------------------------------------------------------------------"
+# Apply SUSE fix until https://review.openstack.org/508154 is merged
+if [[ ${OS_FAMILY,,} == "suse" ]]; then
+ ssh root@$OPNFV_HOST_IP "ansible --ssh-extra-args='-o StrictHostKeyChecking=no' \
+ -i releng-xci/.cache/repos/openstack-ansible/playbooks/inventory/ galera_container -m shell \
+ -a \"sed -i \\\"s@/var/run/mysqld/mysqld.sock@/var/run/mysql/mysql.sock@\\\" /etc/my.cnf\""
+fi
+
+ssh root@$OPNFV_HOST_IP "ansible --ssh-extra-args='-o StrictHostKeyChecking=no' \
+ -i releng-xci/.cache/repos/openstack-ansible/playbooks/inventory/ galera_container -m shell \
+ -a \"mysql -h localhost -e \\\"show status like '%wsrep_cluster_%';\\\"\" | tee galera.log"
+scp root@$OPNFV_HOST_IP:~/galera.log $LOG_PATH/galera.log
+echo "-----------------------------------------------------------------------"
+# check the log to see if we have any error
+if grep -q 'FAILED\|UNREACHABLE' $LOG_PATH/galera.log; then
+ echo "Error: Database cluster verification failed!"
+ exit 1
+fi
+echo "Info: Database cluster verification successful!"
+
+#-------------------------------------------------------------------------------
+# Install OpenStack
+#-------------------------------------------------------------------------------
+# This is openstack-ansible playbook. Check upstream documentation for details.
+#-------------------------------------------------------------------------------
+echo "Info: Installing OpenStack on target hosts"
+echo "-----------------------------------------------------------------------"
+ssh root@$OPNFV_HOST_IP "openstack-ansible ${XCI_ANSIBLE_VERBOSITY} \
+ releng-xci/.cache/repos/openstack-ansible/playbooks/setup-openstack.yml | tee opnfv-setup-openstack.log"
+scp root@$OPNFV_HOST_IP:~/opnfv-setup-openstack.log $LOG_PATH/opnfv-setup-openstack.log
+echo "-----------------------------------------------------------------------"
+# check the log to see if we have any error
+if grep -q 'failed=1\|unreachable=1' $LOG_PATH/opnfv-setup-openstack.log; then
+ echo "Error: OpenStack installation failed!"
+ exit 1
+fi
+echo "Info: OpenStack installation is successfully completed!"
+
+#-------------------------------------------------------------------------------
+# - Getting OpenStack login information
+#-------------------------------------------------------------------------------
+echo "Info: Openstack login details"
+echo "-----------------------------------------------------------------------"
+OS_USER_CONFIG=$XCI_PATH/xci/file/$XCI_FLAVOR/openstack_user_config.yml
+python -c \
+"import yaml
+if '$XCI_FLAVOR' is 'aio':
+ print 'Horizon UI is available at https://$OPNFV_HOST_IP'
+else:
+ host_info = open('$OS_USER_CONFIG', 'r')
+ net_config = yaml.safe_load(host_info)
+ print 'Info: Horizon UI is available at https://{}' \
+ .format(net_config['global_overrides']['external_lb_vip_address'])"
+USERNAME=$(ssh -q root@$OPNFV_HOST_IP awk "/OS_USERNAME=./" openrc)
+PASSWORD=$(ssh -q root@$OPNFV_HOST_IP awk "/OS_PASSWORD=./" openrc)
+echo "Info: Admin username - ${USERNAME##*=}"
+echo "Info: Admin password - ${PASSWORD##*=}"
+echo "Info: It is recommended to change the default password."
+
+# vim: set ts=4 sw=4 expandtab:
diff --git a/xci/xci-deploy.sh b/xci/xci-deploy.sh
index abb648d7..3f28e48f 100755
--- a/xci/xci-deploy.sh
+++ b/xci/xci-deploy.sh
@@ -22,6 +22,7 @@ submit_bug_report() {
echo "openstack/bifrost version: $OPENSTACK_BIFROST_VERSION"
echo "openstack/openstack-ansible version: $OPENSTACK_OSA_VERSION"
echo "xci flavor: $XCI_FLAVOR"
+ echo "xci nfvi: $XCI_NFVI"
echo "Environment variables:"
env | grep --color=never '\(OPNFV\|XCI\|OPENSTACK\)'
echo "-------------------------------------------------------------------------"
@@ -58,6 +59,8 @@ source $XCI_PATH/xci/config/user-vars
source $XCI_PATH/xci/config/pinned-versions
# source flavor configuration
source "$XCI_PATH/xci/config/${XCI_FLAVOR}-vars"
+# source NFVI configuration
+source "$XCI_PATH/xci/nfvi/${XCI_NFVI}/env" &>/dev/null || true
# source xci configuration
source $XCI_PATH/xci/config/env-vars
@@ -84,6 +87,7 @@ echo "Info: Starting XCI Deployment"
echo "Info: Deployment parameters"
echo "-------------------------------------------------------------------------"
echo "xci flavor: $XCI_FLAVOR"
+echo "xci nfvi: $XCI_NFVI"
echo "opnfv/releng-xci version: $(git rev-parse HEAD)"
echo "openstack/bifrost version: $OPENSTACK_BIFROST_VERSION"
echo "openstack/openstack-ansible version: $OPENSTACK_OSA_VERSION"
@@ -128,22 +132,6 @@ if [[ $OS_FAMILY == RedHat ]]; then
exit 1
fi
-if [[ ${OPENSTACK_OSA_VERSION} =~ "stable/" ]]; then
- echo ""
- echo "+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++"
- echo "WARNING: We have detected that you are trying to use a stable OpenStack-Ansible."
- echo "This will likely not work because, unless you know what you are doing, you are going"
- echo "to be mixing roles and services from the master branch with a stable OpenStack-Ansible."
- echo "This is _NOT_ supported in any way but we can try to make it work for you."
- echo "Either way you are on your own so please do not report bugs as they will be considered invalid."
- echo "+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++"
- echo ""
- sleep 15
- trap - ERR
- ${XCI_PATH}/xci/scripts/update-osa-version-files.sh ${OPENSTACK_OSA_VERSION}
-fi
-# TODO: The xci playbooks can be put into a playbook which will be done later.
-
# Clone OPNFV scenario repositories
#-------------------------------------------------------------------------------
# This playbook
@@ -185,174 +173,11 @@ cd ${XCI_CACHE}/repos/bifrost
bash ./scripts/bifrost-provision.sh
echo "-----------------------------------------------------------------------"
echo "Info: VM nodes are provisioned!"
-#-------------------------------------------------------------------------------
-# Configure localhost
-#-------------------------------------------------------------------------------
-# This playbook
-# - removes directories that were created by the previous xci run
-# - clones opnfv/releng-xci repository
-# - creates log directory
-# - copies flavor files such as playbook, inventory, and var file
-#-------------------------------------------------------------------------------
-
-echo "Info: Configuring localhost for openstack-ansible"
-echo "-----------------------------------------------------------------------"
-cd $XCI_PLAYBOOKS
-ansible-playbook ${XCI_ANSIBLE_VERBOSITY} -i inventory configure-localhost.yml
-echo "-----------------------------------------------------------------------"
-echo "Info: Configured localhost host for openstack-ansible"
-
-#-------------------------------------------------------------------------------
-# Configure openstack-ansible deployment host, opnfv
-#-------------------------------------------------------------------------------
-# This playbook
-# - removes directories that were created by the previous xci run
-# - clones opnfv/releng-xci and openstack/openstack-ansible repositories
-# - configures network
-# - generates/prepares ssh keys
-# - bootstraps ansible
-# - copies flavor files to be used by openstack-ansible
-#-------------------------------------------------------------------------------
-echo "Info: Configuring opnfv deployment host for openstack-ansible"
-echo "-----------------------------------------------------------------------"
-cd $XCI_PLAYBOOKS
-ansible-playbook ${XCI_ANSIBLE_VERBOSITY} -i ${XCI_FLAVOR_ANSIBLE_FILE_PATH}/inventory \
- configure-opnfvhost.yml
-echo "-----------------------------------------------------------------------"
-echo "Info: Configured opnfv deployment host for openstack-ansible"
-
-#-------------------------------------------------------------------------------
-# Configure target hosts for openstack-ansible
-#-------------------------------------------------------------------------------
-# This playbook is only run for the all flavors except aio since aio is configured
-# by an upstream script.
-
-# This playbook
-# - adds public keys to target hosts
-# - configures network
-# - configures nfs
-#-------------------------------------------------------------------------------
-if [[ $XCI_FLAVOR != "aio" ]]; then
- echo "Info: Configuring target hosts for openstack-ansible"
- echo "-----------------------------------------------------------------------"
- cd $XCI_PLAYBOOKS
- ansible-playbook ${XCI_ANSIBLE_VERBOSITY} -i ${XCI_FLAVOR_ANSIBLE_FILE_PATH}/inventory \
- configure-targethosts.yml
- echo "-----------------------------------------------------------------------"
- echo "Info: Configured target hosts"
-fi
-
-#-------------------------------------------------------------------------------
-# Set up target hosts for openstack-ansible
-#-------------------------------------------------------------------------------
-# This is openstack-ansible playbook. Check upstream documentation for details.
-#-------------------------------------------------------------------------------
-echo "Info: Setting up target hosts for openstack-ansible"
echo "-----------------------------------------------------------------------"
-ssh root@$OPNFV_HOST_IP "openstack-ansible ${XCI_ANSIBLE_VERBOSITY} \
- releng-xci/.cache/repos/openstack-ansible/playbooks/setup-hosts.yml | tee setup-hosts.log "
-scp root@$OPNFV_HOST_IP:~/setup-hosts.log $LOG_PATH/setup-hosts.log
-echo "-----------------------------------------------------------------------"
-echo "Info: Set up target hosts for openstack-ansible successfuly"
-# TODO: Check this with the upstream and issue a fix in the documentation if the
-# problem is valid.
-#-------------------------------------------------------------------------------
-# Gather facts for all the hosts and containers
-#-------------------------------------------------------------------------------
-# This is needed in order to gather the facts for containers due to a change in
-# upstream that changed the hosts fact are gathered which causes failures during
-# running setup-infrastructure.yml playbook due to lack of the facts for lxc
-# containers.
-#
-# OSA gate also executes this command. See the link
-# http://logs.openstack.org/64/494664/1/check/gate-openstack-ansible-openstack-ansible-aio-ubuntu-xenial/2a0700e/console.html
-#-------------------------------------------------------------------------------
-echo "Info: Gathering facts"
-echo "-----------------------------------------------------------------------"
-ssh root@$OPNFV_HOST_IP "cd releng-xci/.cache/repos/openstack-ansible/playbooks; \
- ansible ${XCI_ANSIBLE_VERBOSITY} -m setup -a gather_subset=network,hardware,virtual all"
-echo "-----------------------------------------------------------------------"
-
-#-------------------------------------------------------------------------------
-# Set up infrastructure
-#-------------------------------------------------------------------------------
-# This is openstack-ansible playbook. Check upstream documentation for details.
-#-------------------------------------------------------------------------------
-echo "Info: Setting up infrastructure"
-echo "-----------------------------------------------------------------------"
-echo "xci: running ansible playbook setup-infrastructure.yml"
-ssh root@$OPNFV_HOST_IP "openstack-ansible ${XCI_ANSIBLE_VERBOSITY} \
- releng-xci/.cache/repos/openstack-ansible/playbooks/setup-infrastructure.yml | tee setup-infrastructure.log"
-scp root@$OPNFV_HOST_IP:~/setup-infrastructure.log $LOG_PATH/setup-infrastructure.log
-echo "-----------------------------------------------------------------------"
-# check the log to see if we have any error
-if grep -q 'failed=1\|unreachable=1' $LOG_PATH/setup-infrastructure.log; then
- echo "Error: OpenStack node setup failed!"
- exit 1
-fi
-
-#-------------------------------------------------------------------------------
-# Verify database cluster
-#-------------------------------------------------------------------------------
-echo "Info: Verifying database cluster"
-echo "-----------------------------------------------------------------------"
-# Apply SUSE fix until https://review.openstack.org/508154 is merged
-if [[ ${OS_FAMILY,,} == "suse" ]]; then
- ssh root@$OPNFV_HOST_IP "ansible --ssh-extra-args='-o StrictHostKeyChecking=no' \
- -i releng-xci/.cache/repos/openstack-ansible/playbooks/inventory/ galera_container -m shell \
- -a \"sed -i \\\"s@/var/run/mysqld/mysqld.sock@/var/run/mysql/mysql.sock@\\\" /etc/my.cnf\""
-fi
-
-ssh root@$OPNFV_HOST_IP "ansible --ssh-extra-args='-o StrictHostKeyChecking=no' \
- -i releng-xci/.cache/repos/openstack-ansible/playbooks/inventory/ galera_container -m shell \
- -a \"mysql -h localhost -e \\\"show status like '%wsrep_cluster_%';\\\"\" | tee galera.log"
-scp root@$OPNFV_HOST_IP:~/galera.log $LOG_PATH/galera.log
-echo "-----------------------------------------------------------------------"
-# check the log to see if we have any error
-if grep -q 'FAILED\|UNREACHABLE' $LOG_PATH/galera.log; then
- echo "Error: Database cluster verification failed!"
- exit 1
-fi
-echo "Info: Database cluster verification successful!"
-
-#-------------------------------------------------------------------------------
-# Install OpenStack
-#-------------------------------------------------------------------------------
-# This is openstack-ansible playbook. Check upstream documentation for details.
-#-------------------------------------------------------------------------------
-echo "Info: Installing OpenStack on target hosts"
-echo "-----------------------------------------------------------------------"
-ssh root@$OPNFV_HOST_IP "openstack-ansible ${XCI_ANSIBLE_VERBOSITY} \
- releng-xci/.cache/repos/openstack-ansible/playbooks/setup-openstack.yml | tee opnfv-setup-openstack.log"
-scp root@$OPNFV_HOST_IP:~/opnfv-setup-openstack.log $LOG_PATH/opnfv-setup-openstack.log
-echo "-----------------------------------------------------------------------"
-# check the log to see if we have any error
-if grep -q 'failed=1\|unreachable=1' $LOG_PATH/opnfv-setup-openstack.log; then
- echo "Error: OpenStack installation failed!"
- exit 1
-fi
-echo "Info: OpenStack installation is successfully completed!"
-
-#-------------------------------------------------------------------------------
-# - Getting OpenStack login information
-#-------------------------------------------------------------------------------
-echo "Info: Openstack login details"
+# Deploy OpenStack on the selected NFVI
+echo "Info: Deploying '${XCI_NFVI}' NFVI"
echo "-----------------------------------------------------------------------"
-OS_USER_CONFIG=$XCI_PATH/xci/file/$XCI_FLAVOR/openstack_user_config.yml
-python -c \
-"import yaml
-if '$XCI_FLAVOR' is 'aio':
- print 'Horizon UI is available at https://$OPNFV_HOST_IP'
-else:
- host_info = open('$OS_USER_CONFIG', 'r')
- net_config = yaml.safe_load(host_info)
- print 'Info: Horizon UI is available at https://{}' \
- .format(net_config['global_overrides']['external_lb_vip_address'])"
-USERNAME=$(ssh -q root@$OPNFV_HOST_IP awk "/OS_USERNAME=./" openrc)
-PASSWORD=$(ssh -q root@$OPNFV_HOST_IP awk "/OS_PASSWORD=./" openrc)
-echo "Info: Admin username - ${USERNAME##*=}"
-echo "Info: Admin password - ${PASSWORD##*=}"
-echo "Info: It is recommended to change the default password."
+source ${XCI_PATH}/xci/nfvi/${XCI_NFVI}/nfvi-deploy.sh
# vim: set ts=4 sw=4 expandtab: