3 ##############################################################################
4 # Copyright (c) 2015 Ericsson AB and others.
5 # jonas.bjurel@ericsson.com
6 # All rights reserved. This program and the accompanying materials
7 # are made available under the terms of the Apache License, Version 2.0
8 # which accompanies this distribution, and is available at
9 # http://www.apache.org/licenses/LICENSE-2.0
10 ##############################################################################
12 ############################################################################
13 # BEGIN of Exit handlers
20 # End of Exit handlers
21 ############################################################################
23 ############################################################################
24 # BEGIN of usage description
29 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
30 `basename $0`: Deploys the Fuel@OPNFV stack
32 usage: `basename $0` -b base-uri [-B PXE Bridge] [-f] [-F] [-H] -l lab-name -p pod-name -s deploy-scenario [-S image-dir] -i iso
33 -s deployment-scenario [-S optional Deploy-scenario path URI]
34 [-R optional local relen repo (containing deployment Scenarios]
37 -b Base-uri for the stack-configuration structure
38 -B PXE Bridge for booting of Fuel master
40 -f Deploy on existing Fuel master
41 -e Do not launch environment deployment
42 -F Do only create a Fuel master
43 -h Print this message and exit
46 -L Deployment log path and file name
48 -s Deploy-scenario short-name/base-file-name
49 -S Storage dir for VM images
53 Deploys the Fuel@OPNFV stack on the indicated lab resource
55 This script provides the Fuel@OPNFV deployment abstraction
56 It depends on the OPNFV official configuration directory/file structure
57 and provides a fairly simple mechanism to execute a deployment.
58 Input parameters to the build script is:
59 -b Base URI to the configuration directory (needs to be provided in a URI
60 style, it can be a local resource: file:// or a remote resource http(s)://)
61 -B PXE Bridge for booting of Fuel master. It can be specified several times,
62 or as a comma separated list of bridges, or both: -B br1 -B br2,br3
63 One NIC connected to each specified bridge will be created in the Fuel VM,
64 in the same order as provided in the command line. The default is pxebr.
65 -d Dry-run - Produces deploy config files (config/dea.yaml and
66 config/dha.yaml), but does not execute deploy
67 -f Deploy on existing Fuel master
68 -e Do not launch environment deployment
69 -F Do only create a Fuel master
70 -h Print this message and exit
71 -H Do not run fuel built in health-check after successfull deployment
72 -l Lab name as defined in the configuration directory, e.g. lf
73 -L Deployment log path and name, eg. -L /home/jenkins/logs/job888.log.tar.gz
74 -p POD name as defined in the configuration directory, e.g. pod-1
75 -s Deployment-scenario, this points to a deployment/test scenario file as
76 defined in the configuration directory:
77 e.g fuel-ocl-heat-ceilometer_scenario_0.0.1.yaml
78 or a deployment short-name as defined by scenario.yaml in the deployment
80 -S Storage dir for VM images, default is fuel/deploy/images
81 -i .iso image to be deployed (needs to be provided in a URI
82 style, it can be a local resource: file:// or a remote resource http(s)://)
84 NOTE: Root priviledges are needed for this script to run
88 sudo `basename $0` -b file:///home/jenkins/lab-config -l lf -p pod1 -s ha_odl-l3_heat_ceilometer -i file:///home/jenkins/myiso.iso
93 # END of usage description
94 ############################################################################
96 ############################################################################
97 # BEGIN of deployment clean-up
100 echo "Cleaning up deploy tmp directories"
101 rm -rf ${SCRIPT_PATH}/ISO
104 # END of deployment clean-up
105 ############################################################################
107 ############################################################################
108 # BEGIN of shorthand variables for internal use
110 SCRIPT_PATH=$(readlink -f $(dirname ${BASH_SOURCE[0]}))
111 DEPLOY_DIR=$(cd ${SCRIPT_PATH}/../deploy; pwd)
115 FUEL_CREATION_ONLY=''
116 NO_DEPLOY_ENVIRONMENT=''
120 # END of variables to customize
121 ############################################################################
123 ############################################################################
126 while getopts "b:B:dfFHl:L:p:s:S:i:he" OPTION
130 BASE_CONFIG_URI=${OPTARG}
131 if [[ ! $BASE_CONFIG_URI == file://* ]] && \
132 [[ ! $BASE_CONFIG_URI == http://* ]] && \
133 [[ ! $BASE_CONFIG_URI == https://* ]] && \
134 [[ ! $BASE_CONFIG_URI == ftp://* ]]; then
135 echo "-b $BASE_CONFIG_URI - Not given in URI style"
141 for bridge in ${OPTARG//,/ }; do
142 PXE_BRIDGE+=" -b $bridge"
149 USE_EXISTING_FUEL='-nf'
152 FUEL_CREATION_ONLY='-fo'
155 NO_DEPLOY_ENVIRONMENT='-nde'
158 NO_HEALTH_CHECK='-nh'
164 DEPLOY_LOG="-log ${OPTARG}"
170 DEPLOY_SCENARIO=${OPTARG}
173 if [[ ${OPTARG} ]]; then
174 STORAGE_DIR="-s ${OPTARG}"
179 if [[ ! $ISO == file://* ]] && \
180 [[ ! $ISO == http://* ]] && \
181 [[ ! $ISO == https://* ]] && \
182 [[ ! $ISO == ftp://* ]]; then
183 echo "-i $ISO - Not given in URI style"
193 echo "${OPTION} is not a valid argument"
194 echo "Arguments not according to new argument style"
195 echo "Trying old-style compatibility mode"
196 pushd ${DEPLOY_DIR} > /dev/null
197 python deploy.py "$@"
204 if [[ $EUID -ne 0 ]]; then
205 echo "This script must be run as root" 1>&2
209 if [ -z $BASE_CONFIG_URI ] || [ -z $TARGET_LAB ] || \
210 [ -z $TARGET_POD ] || [ -z $DEPLOY_SCENARIO ] || \
212 echo "Arguments not according to new argument style"
213 echo "Trying old-style compatibility mode"
214 pushd ${DEPLOY_DIR} > /dev/null
215 python deploy.py "$@"
220 # Enable the automatic exit trap
221 trap do_exit SIGINT SIGTERM EXIT
223 # Set no restrictive umask so that Jenkins can removeeee any residuals
228 pushd ${DEPLOY_DIR} > /dev/null
229 # Prepare the deploy config files based on lab/pod information, deployment
232 echo "python deploy-config.py -dha ${BASE_CONFIG_URI}/labs/${TARGET_LAB}/${TARGET_POD}/fuel/config/dha.yaml -deab file://${DEPLOY_DIR}/config/dea_base.yaml -deao ${BASE_CONFIG_URI}/labs/${TARGET_LAB}/${TARGET_POD}/fuel/config/dea-pod-override.yaml -scenario-base-uri file://${DEPLOY_DIR}/scenario -scenario ${DEPLOY_SCENARIO} -plugins file://${DEPLOY_DIR}/config/plugins -output ${SCRIPT_PATH}/config"
234 python deploy-config.py -dha ${BASE_CONFIG_URI}/labs/${TARGET_LAB}/${TARGET_POD}/fuel/config/dha.yaml -deab file://${DEPLOY_DIR}/config/dea_base.yaml -deao ${BASE_CONFIG_URI}/labs/${TARGET_LAB}/${TARGET_POD}/fuel/config/dea-pod-override.yaml -scenario-base-uri file://${DEPLOY_DIR}/scenario -scenario ${DEPLOY_SCENARIO} -plugins file://${DEPLOY_DIR}/config/plugins -output ${SCRIPT_PATH}/config
236 if [ $DRY_RUN -eq 0 ]; then
237 # Download iso if it doesn't already exists locally
238 if [[ $ISO == file://* ]]; then
241 mkdir -p ${SCRIPT_PATH}/ISO
242 curl -o ${SCRIPT_PATH}/ISO/image.iso $ISO
243 ISO=${SCRIPT_PATH}/ISO/image.iso
246 echo "python deploy.py $DEPLOY_LOG $STORAGE_DIR $PXE_BRIDGE $USE_EXISTING_FUEL $FUEL_CREATION_ONLY $NO_HEALTH_CHECK $NO_DEPLOY_ENVIRONMENT -dea ${SCRIPT_PATH}/config/dea.yaml -dha ${SCRIPT_PATH}/config/dha.yaml -iso $ISO"
247 python deploy.py $DEPLOY_LOG $STORAGE_DIR $PXE_BRIDGE $USE_EXISTING_FUEL $FUEL_CREATION_ONLY $NO_HEALTH_CHECK $NO_DEPLOY_ENVIRONMENT -dea ${SCRIPT_PATH}/config/dea.yaml -dha ${SCRIPT_PATH}/config/dha.yaml -iso $ISO
253 ############################################################################