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] [-T timeout] -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
50 -T Timeout, in minutes, for the deploy.
54 Deploys the Fuel@OPNFV stack on the indicated lab resource
56 This script provides the Fuel@OPNFV deployment abstraction
57 It depends on the OPNFV official configuration directory/file structure
58 and provides a fairly simple mechanism to execute a deployment.
59 Input parameters to the build script is:
60 -b Base URI to the configuration directory (needs to be provided in a URI
61 style, it can be a local resource: file:// or a remote resource http(s)://)
62 -B PXE Bridge for booting of Fuel master. It can be specified several times,
63 or as a comma separated list of bridges, or both: -B br1 -B br2,br3
64 One NIC connected to each specified bridge will be created in the Fuel VM,
65 in the same order as provided in the command line. The default is pxebr.
66 -d Dry-run - Produces deploy config files (config/dea.yaml and
67 config/dha.yaml), but does not execute deploy
68 -f Deploy on existing Fuel master
69 -e Do not launch environment deployment
70 -F Do only create a Fuel master
71 -h Print this message and exit
72 -H Do not run fuel built in health-check after successfull deployment
73 -l Lab name as defined in the configuration directory, e.g. lf
74 -L Deployment log path and name, eg. -L /home/jenkins/logs/job888.log.tar.gz
75 -p POD name as defined in the configuration directory, e.g. pod-1
76 -s Deployment-scenario, this points to a deployment/test scenario file as
77 defined in the configuration directory:
78 e.g fuel-ocl-heat-ceilometer_scenario_0.0.1.yaml
79 or a deployment short-name as defined by scenario.yaml in the deployment
81 -S Storage dir for VM images, default is fuel/deploy/images
82 -T Timeout, in minutes, for the deploy. It defaults to using the DEPLOY_TIMEOUT
83 environment variable when defined, or to the default in deploy.py otherwise
84 -i .iso image to be deployed (needs to be provided in a URI
85 style, it can be a local resource: file:// or a remote resource http(s)://)
87 NOTE: Root priviledges are needed for this script to run
91 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
96 # END of usage description
97 ############################################################################
99 ############################################################################
100 # BEGIN of deployment clean-up
103 echo "Cleaning up deploy tmp directories"
104 rm -rf ${SCRIPT_PATH}/ISO
107 # END of deployment clean-up
108 ############################################################################
110 ############################################################################
111 # BEGIN of shorthand variables for internal use
113 SCRIPT_PATH=$(readlink -f $(dirname ${BASH_SOURCE[0]}))
114 DEPLOY_DIR=$(cd ${SCRIPT_PATH}/../deploy; pwd)
118 FUEL_CREATION_ONLY=''
119 NO_DEPLOY_ENVIRONMENT=''
122 if ! [ -z $DEPLOY_TIMEOUT ]; then
123 DEPLOY_TIMEOUT="-dt $DEPLOY_TIMEOUT"
128 # END of variables to customize
129 ############################################################################
131 ############################################################################
134 while getopts "b:B:dfFHl:L:p:s:S:T:i:he" OPTION
138 BASE_CONFIG_URI=${OPTARG}
139 if [[ ! $BASE_CONFIG_URI == file://* ]] && \
140 [[ ! $BASE_CONFIG_URI == http://* ]] && \
141 [[ ! $BASE_CONFIG_URI == https://* ]] && \
142 [[ ! $BASE_CONFIG_URI == ftp://* ]]; then
143 echo "-b $BASE_CONFIG_URI - Not given in URI style"
149 for bridge in ${OPTARG//,/ }; do
150 PXE_BRIDGE+=" -b $bridge"
157 USE_EXISTING_FUEL='-nf'
160 FUEL_CREATION_ONLY='-fo'
163 NO_DEPLOY_ENVIRONMENT='-nde'
166 NO_HEALTH_CHECK='-nh'
172 DEPLOY_LOG="-log ${OPTARG}"
178 DEPLOY_SCENARIO=${OPTARG}
181 if [[ ${OPTARG} ]]; then
182 STORAGE_DIR="-s ${OPTARG}"
186 DEPLOY_TIMEOUT="-dt ${OPTARG}"
190 if [[ ! $ISO == file://* ]] && \
191 [[ ! $ISO == http://* ]] && \
192 [[ ! $ISO == https://* ]] && \
193 [[ ! $ISO == ftp://* ]]; then
194 echo "-i $ISO - Not given in URI style"
204 echo "${OPTION} is not a valid argument"
205 echo "Arguments not according to new argument style"
206 echo "Trying old-style compatibility mode"
207 pushd ${DEPLOY_DIR} > /dev/null
208 python deploy.py "$@"
215 if [[ $EUID -ne 0 ]]; then
216 echo "This script must be run as root" 1>&2
220 if [ -z $BASE_CONFIG_URI ] || [ -z $TARGET_LAB ] || \
221 [ -z $TARGET_POD ] || [ -z $DEPLOY_SCENARIO ] || \
223 echo "Arguments not according to new argument style"
224 echo "Trying old-style compatibility mode"
225 pushd ${DEPLOY_DIR} > /dev/null
226 python deploy.py "$@"
231 # Enable the automatic exit trap
232 trap do_exit SIGINT SIGTERM EXIT
234 # Set no restrictive umask so that Jenkins can removeeee any residuals
239 pushd ${DEPLOY_DIR} > /dev/null
240 # Prepare the deploy config files based on lab/pod information, deployment
243 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"
245 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
247 if [ $DRY_RUN -eq 0 ]; then
248 # Download iso if it doesn't already exists locally
249 if [[ $ISO == file://* ]]; then
252 mkdir -p ${SCRIPT_PATH}/ISO
253 curl -o ${SCRIPT_PATH}/ISO/image.iso $ISO
254 ISO=${SCRIPT_PATH}/ISO/image.iso
257 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 $DEPLOY_TIMEOUT"
258 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 $DEPLOY_TIMEOUT
264 ############################################################################