#!/bin/bash
# SPDX-license-identifier: Apache-2.0
##############################################################################
-# Copyright (c) 2016 Ericsson AB and others.
+# Copyright (c) 2017 Ericsson AB, Mirantis Inc., Enea Software AB and others.
# 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
set -o nounset
set -o pipefail
-# source the file so we get OPNFV vars
-source latest.properties
+export TERM="vt220"
-# echo the info about artifact that is used during the deployment
-echo "Using ${OPNFV_ARTIFACT_URL/*\/} for deployment"
+if [[ "$BRANCH" =~ 'danube' ]]; then
+ # source the file so we get OPNFV vars
+ # shellcheck disable=SC1091
+ source latest.properties
-if [[ "$JOB_NAME" =~ "merge" ]]; then
- # set simplest scenario for virtual deploys to run for merges
- DEPLOY_SCENARIO="os-nosdn-nofeature-ha"
-else
- # for none-merge deployments
+ # echo the info about artifact that is used during the deployment
+ echo "Using ${OPNFV_ARTIFACT_URL/*\/} for deployment"
+
+ # for Danube deployments (no artifact for current master or newer branches)
# checkout the commit that was used for building the downloaded artifact
# to make sure the ISO and deployment mechanism uses same versions
- echo "Checking out $OPNFV_GIT_SHA1"
- git checkout $OPNFV_GIT_SHA1 --quiet
+ echo "Checking out ${OPNFV_GIT_SHA1}"
+ git checkout "${OPNFV_GIT_SHA1}" --quiet
+
+ # releng wants us to use nothing else but opnfv.iso for now. We comply.
+ ISO_FILE_ARG="-i file://${WORKSPACE}/opnfv.iso"
+fi
+
+# shellcheck disable=SC2153
+if [[ "${JOB_NAME}" =~ 'verify' ]]; then
+ # set simplest scenario for virtual deploys to run for verify
+ DEPLOY_SCENARIO="os-nosdn-nofeature-noha"
fi
# set deployment parameters
-export TMPDIR=$HOME/tmpdir
-BRIDGE=${BRIDGE:-pxebr}
+export TMPDIR=${HOME}/tmpdir
+# shellcheck disable=SC2153
LAB_NAME=${NODE_NAME/-*}
+# shellcheck disable=SC2153
POD_NAME=${NODE_NAME/*-}
-
-if [[ "$NODE_NAME" =~ "virtual" ]]; then
- POD_NAME="virtual_kvm"
-fi
-
-# we currently support ericsson, intel, lf and zte labs
-if [[ ! "$LAB_NAME" =~ (ericsson|intel|lf|zte) ]]; then
- echo "Unsupported/unidentified lab $LAB_NAME. Cannot continue!"
- exit 1
+# Armband might override LAB_CONFIG_URL, all others use the default
+LAB_CONFIG_URL=${LAB_CONFIG_URL:-'ssh://jenkins-ericsson@gerrit.opnfv.org:29418/securedlab'}
+
+# Fuel requires deploy script to be ran with sudo, Armband does not
+SUDO='sudo -E'
+if [ "${PROJECT}" = 'fuel' ]; then
+ # Fuel currently supports ericsson, intel, lf and zte labs
+ if [[ ! "${LAB_NAME}" =~ (ericsson|intel|lf|zte) ]]; then
+ echo "Unsupported/unidentified lab ${LAB_NAME}. Cannot continue!"
+ exit 1
+ fi
else
- echo "Using configuration for $LAB_NAME"
+ SUDO=
+ # Armband currently supports arm, enea labs
+ if [[ ! "${LAB_NAME}" =~ (arm|enea) ]]; then
+ echo "Unsupported/unidentified lab ${LAB_NAME}. Cannot continue!"
+ exit 1
+ fi
fi
-# create TMPDIR if it doesn't exist
-export TMPDIR=$HOME/tmpdir
-mkdir -p $TMPDIR
-
-# change permissions down to TMPDIR
-chmod a+x $HOME
-chmod a+x $TMPDIR
-
-# clone the securedlab repo
-cd $WORKSPACE
-echo "Cloning securedlab repo ${GIT_BRANCH##origin/}"
-git clone ssh://jenkins-ericsson@gerrit.opnfv.org:29418/securedlab --quiet \
- --branch ${GIT_BRANCH##origin/}
+echo "Using configuration for ${LAB_NAME}"
+
+# create TMPDIR if it doesn't exist, change permissions
+mkdir -p "${TMPDIR}"
+chmod a+x "${HOME}" "${TMPDIR}"
+
+cd "${WORKSPACE}" || exit 1
+if [[ "$BRANCH" =~ (danube|euphrates) ]]; then
+ if [[ "${LAB_CONFIG_URL}" =~ ^(git|ssh):// ]]; then
+ echo "Cloning securedlab repo ${BRANCH}"
+ LOCAL_CFG="${TMPDIR}/securedlab"
+ rm -rf "${LOCAL_CFG}"
+ git clone --quiet --branch "${BRANCH}" "${LAB_CONFIG_URL}" "${LOCAL_CFG}"
+ LAB_CONFIG_ARG="-b file://${LOCAL_CFG}"
+ BRIDGE_ARG="-B ${BRIDGE:-pxebr}"
+ else
+ LAB_CONFIG_ARG="-b ${LAB_CONFIG_URL}"
+ fi
+fi
# log file name
FUEL_LOG_FILENAME="${JOB_NAME}_${BUILD_NUMBER}.log.tar.gz"
# construct the command
-DEPLOY_COMMAND="sudo $WORKSPACE/ci/deploy.sh -b file://$WORKSPACE/securedlab \
- -l $LAB_NAME -p $POD_NAME -s $DEPLOY_SCENARIO -i file://$WORKSPACE/opnfv.iso \
- -H -B $BRIDGE -S $TMPDIR -L $WORKSPACE/$FUEL_LOG_FILENAME"
+DEPLOY_COMMAND="${SUDO} ${WORKSPACE}/ci/deploy.sh ${LAB_CONFIG_ARG:-} \
+ -l ${LAB_NAME} -p ${POD_NAME} -s ${DEPLOY_SCENARIO} ${ISO_FILE_ARG:-} \
+ -S ${TMPDIR} ${BRIDGE_ARG:-} \
+ -L ${WORKSPACE}/${FUEL_LOG_FILENAME}"
# log info to console
echo "Deployment parameters"
echo "--------------------------------------------------------"
-echo "Scenario: $DEPLOY_SCENARIO"
-echo "Lab: $LAB_NAME"
-echo "POD: $POD_NAME"
-echo "ISO: ${OPNFV_ARTIFACT_URL/*\/}"
+echo "Scenario: ${DEPLOY_SCENARIO}"
+echo "Lab: ${LAB_NAME}"
+echo "POD: ${POD_NAME}"
+[[ "${BRANCH}" =~ 'danube' ]] && echo "ISO: ${OPNFV_ARTIFACT_URL/*\/}"
echo
-echo "Starting the deployment using $INSTALLER_TYPE. This could take some time..."
+echo "Starting the deployment using ${INSTALLER_TYPE}. This could take some time..."
echo "--------------------------------------------------------"
echo
# start the deployment
echo "Issuing command"
-echo "$DEPLOY_COMMAND"
+echo "${DEPLOY_COMMAND}"
echo
-$DEPLOY_COMMAND
+${DEPLOY_COMMAND}
exit_code=$?
echo
echo "Deployment is done!"
# upload logs for baremetal deployments
-# work with virtual deployments is still going on so we skip that for the timebeing
-if [[ "$JOB_NAME" =~ "baremetal-daily" ]]; then
+# work with virtual deployments is still going on, so skip that for now
+if [[ "${JOB_NAME}" =~ (baremetal-daily|baremetal-weekly) ]]; then
echo "Uploading deployment logs"
- gsutil cp $WORKSPACE/$FUEL_LOG_FILENAME gs://$GS_URL/logs/$FUEL_LOG_FILENAME > /dev/null 2>&1
- echo "Logs are available as http://$GS_URL/logs/$FUEL_LOG_FILENAME"
+ gsutil cp "${WORKSPACE}/${FUEL_LOG_FILENAME}" \
+ "gs://${GS_URL}/logs/${FUEL_LOG_FILENAME}" > /dev/null 2>&1
+ echo "Logs are available at http://${GS_URL}/logs/${FUEL_LOG_FILENAME}"
fi
-if [[ $exit_code -ne 0 ]]; then
+if [[ "${exit_code}" -ne 0 ]]; then
echo "Deployment failed!"
- exit $exit_code
-else
- echo "Deployment is successful!"
-fi
-
-# Quick and dirty fix for SFC scenatio - will be fixed properly post-release
-if [[ ! "$DEPLOY_SCENARIO" =~ "os-odl_l2-sfc" ]]; then
- exit 0
+ exit "${exit_code}"
fi
-echo
-echo "SFC Scenario is deployed"
-echo
-
-# The stuff below is here temporarily and will be fixed once the release is out
-# The stuff below is here temporarily and will be fixed once the release is out
-export FUEL_MASTER_IP=10.20.0.2
-export TACKER_SCRIPT_URL="https://git.opnfv.org/cgit/fuel/plain/prototypes/sfc_tacker/poc.tacker-up.sh?h=${GIT_BRANCH#*/}"
-export CONTROLLER_NODE_IP=$(sshpass -pr00tme /usr/bin/ssh -o UserKnownHostsFile=/dev/null \
- -o StrictHostKeyChecking=no root@$FUEL_MASTER_IP 'fuel node list' | \
- grep controller | head -1 | cut -d'|' -f5)
-
-# we can't do much if we do not have the controller IP
-if [[ ! "$CONTROLLER_NODE_IP" =~ "10.20.0" ]]; then
- echo "Unable to retrieve controller IP"
- exit 1
-fi
-
-echo
-echo "Copying and executing poc.tacker-up.sh script on controller node $CONTROLLER_NODE_IP"
-echo
-
-expect << END
-spawn /usr/bin/ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -l root $::env(FUEL_MASTER_IP)
-expect {
- -re ".*sword.*" {
- exp_send "r00tme\r"
- }
-}
-expect "# "
-send "/usr/bin/ssh -l root $::env(CONTROLLER_NODE_IP)\r"
-expect "# "
-send "sudo apt-get install -y git\r"
-expect "# "
-send "/bin/mkdir -p /root/sfc-poc && cd /root/sfc-poc\r"
-expect "# "
-send "git clone https://gerrit.opnfv.org/gerrit/fuel && cd fuel\r"
-expect "# "
-send "/bin/bash /root/sfc-poc/fuel/prototypes/sfc_tacker/poc.tacker-up.sh\r"
-expect "# "
-send "exit\r"
-expect "Connection to $::env(CONTROLLER_NODE_IP) closed. "
-send "exit\r"
-expect "Connection to $::env(FUEL_MASTER_IP) closed. "
-END
+echo "Deployment is successful!"
+exit 0