summaryrefslogtreecommitdiffstats
path: root/jjb/fuel/fuel-deploy.sh
blob: ceccc54b69d31ea9be2ec474584cabca0ae007b0 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
#!/bin/bash
# SPDX-license-identifier: Apache-2.0
##############################################################################
# Copyright (c) 2016 Ericsson 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
# http://www.apache.org/licenses/LICENSE-2.0
##############################################################################
set -o errexit
set -o nounset
set -o pipefail

# source the file so we get OPNFV vars
source latest.properties

# echo the info about artifact that is used during the deployment
echo "Using ${OPNFV_ARTIFACT_URL/*\/} for deployment"

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
    # 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
fi

# set deployment parameters
export TMPDIR=$HOME/tmpdir
BRIDGE=pxebr
LAB_NAME=${NODE_NAME/-*}
POD_NAME=${NODE_NAME/*-}

if [[ "$NODE_NAME" == "opnfv-jump-2" ]]; then
    LAB_NAME="lf"
    POD_NAME="pod2"
fi

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
else
    echo "Using configuration for $LAB_NAME"
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/}

# 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"

# 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
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
echo "--------------------------------------------------------"
echo "Deployment is done successfully!"

# Quick and dirty fix for SFC scenatio - will be fixed properly post-release
if [[ ! "$DEPLOY_SCENARIO" =~ "os-odl_l2-sfc" ]]; then
    exit 0
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 opendaylight | 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 "git fetch https://gerrit.opnfv.org/gerrit/fuel refs/changes/97/10597/2 && git checkout FETCH_HEAD\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
n> - 100-199 Build system internal error (not build it self) o 101 Build system instance busy - 200 Build failure Examples: build -c http://opnfv.org/artifactory/apex/cache -d ~/jenkins/genesis/apex/ci/output -f ti NOTE: At current the build scope is set to the git root of the repository, -d destination locations outside that scope will not work EOF } # # END of usage description ############################################################################ ############################################################################ # BEGIN of variables to customize # BUILD_BASE=$(readlink -e ../build/) RESULT_DIR="${BUILD_BASE}/release" BUILD_SPEC="${BUILD_BASE}/config.mk" CACHE_DIR="cache" LOCAL_CACHE_ARCH_NAME="apex-cache" REMOTE_CACHE_ARCH_NAME="apex_cache-$(md5sum ${BUILD_SPEC}| cut -f1 -d " ")" REMOTE_ACCESS_METHD=curl INCLUDE_DIR=../include # # END of variables to customize ############################################################################ ############################################################################ # BEGIN of script assigned variables # SCRIPT_DIR=$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd ) LOCK_FILE="${SCRIPT_DIR}/.build.lck" CACHE_TMP="${SCRIPT_DIR}/tmp" TEST_SUCCEED=0 TEST_FAIL=0 UNIT_TEST=0 USE_MASTER=0 UPDATE_CACHE=0 POPULATE_CACHE=0 RECURSIV=0 DETACH=0 DEBUG=0 INTEGRATION_TEST=0 FULL_INTEGRATION_TEST=0 INTERACTIVE=0 BUILD_CACHE_URI= BUILD_SPEC= BUILD_DIR= BUILD_LOG= BUILD_VERSION= MAKE_ARGS= # # END of script assigned variables ############################################################################ ############################################################################ # BEGIN of include pragmas # source ${INCLUDE_DIR}/build.sh.debug # # END of include ############################################################################ ############################################################################ # BEGIN of main # while getopts "s:c:d:v:f:l:r:RtTh" OPTION do case $OPTION in h) usage rc=0 exit $rc ;; s) BUILD_SPEC=${OPTARG} ;; c) BUILD_CACHE_URI=${OPTARG} ;; d) BUILD_DIR=${OPTARG} ;; l) BUILD_LOG=${OPTARG} ;; v) BUILD_VERSION=${OPTARG} ;; f) BUILD_FLAGS=${OPTARG} ;; r) REMOTE_ACCESS_METHD=${OPTARG} ;; R) RECURSIVE=1 ;; t) INTEGRATION_TEST=1 ;; T) INTEGRATION_TEST=1 FULL_INTEGRATION_TEST=1 ;; *) echo "${OPTION} is not a valid argument" rc=100 exit $rc ;; esac done if [ -z $BUILD_DIR ]; then BUILD_DIR=$(echo $@ | cut -d ' ' -f ${OPTIND}) fi for ((i=0; i<${#BUILD_FLAGS};i++)); do case ${BUILD_FLAGS:$i:1} in s) rc=0 exit $rc ;; f) rc=1 exit $rc ;; t) UNIT_TEST=1 ;; M) USE_MASTER=1 ;; i) INTERACTIVE=1 ;; P) POPULATE_CACHE=1 ;; d) DETACH=1 echo "Detach is not yet supported - exiting ...." rc=100 exit $rc ;; D) DEBUG=1 ;; *) echo "${BUILD_FLAGS:$i:1} is not a valid build flag - exiting ...." rc=100 exit $rc ;; esac done shift $((OPTIND-1)) if [ ${INTEGRATION_TEST} -eq 1 ]; then integration-test rc=0 exit $rc fi if [ ! -f ${BUILD_SPEC} ]; then echo "spec file does not exist: $BUILD_SPEC - exiting ...." rc=100 exit $rc fi if [ -z ${BUILD_DIR} ]; then echo "Missing build directory - exiting ...." rc=100 exit $rc fi if [ ! -z ${BUILD_LOG} ]; then if [[ ${RECURSIVE} -ne 1 ]]; then set +e eval $0 -R $@ > ${BUILD_LOG} 2>&1 rc=$? set -e if [ $rc -ne 0]; then exit $rc fi fi fi if [ ${TEST_SUCCEED} -eq 1 ]; then sleep 1 rc=0 exit $rc fi if [ ${TEST_FAIL} -eq 1 ]; then sleep 1 rc=1 exit $rc fi if [ -e ${LOCK_FILE} ]; then echo "A build job is already running, exiting....." rc=101 exit $rc fi echo $$ > ${LOCK_FILE} if [ ! -z ${BUILD_CACHE_URI} ]; then if [ ${POPULATE_CACHE} -ne 1 ]; then rm -rf ${CACHE_TMP}/cache mkdir -p ${CACHE_TMP}/cache echo "Downloading cach file ${BUILD_CACHE_URI}/${REMOTE_CACHE_ARCH_NAME} ..." set +e ${REMOTE_ACCESS_METHD} -o ${CACHE_TMP}/cache/${LOCAL_CACHE_ARCH_NAME}.tgz ${BUILD_CACHE_URI}/${REMOTE_CACHE_ARCH_NAME}.tgz rc=$? set -e if [ $rc -ne 0 ]; then echo "Remote cache does not exist, or is not accessible - a new cache will be built ..." POPULATE_CACHE=1 else echo "Unpacking cache file ..." tar --atime-preserve -C ${CACHE_TMP}/cache -xvf ${CACHE_TMP}/cache/${LOCAL_CACHE_ARCH_NAME}.tgz cp ${CACHE_TMP}/cache/cache/.versions ${BUILD_BASE}/. set +e make -C ${BUILD_BASE} validate-cache; rc=$? set -e if [ $rc -ne 0 ]; then echo "Cache invalid - a new cache will be built " POPULATE_CACHE=1 else cp -rf ${CACHE_TMP}/cache/cache/. ${BUILD_BASE} fi rm -rf ${CACHE_TMP}/cache fi fi fi if [ ${POPULATE_CACHE} -eq 1 ]; then if [ ${DEBUG} -eq 0 ]; then set +e cd ${BUILD_BASE} && make clean rc=$? set -e if [ $rc -ne 0 ]; then echo "Build - make clean failed, exiting ..." rc=100 exit $rc fi fi fi if [ ! -z ${BUILD_VERSION} ]; then MAKE_ARGS+="REVSTATE=${BUILD_VERSION} " fi if [ ${UNIT_TEST} -eq 1 ]; then MAKE_ARGS+="UNIT_TEST=TRUE " else MAKE_ARGS+="UNIT_TEST=FALSE " fi if [ ${USE_MASTER} -eq 1 ]; then MAKE_ARGS+="USE_MASTER=-master " fi if [ ${INTERACTIVE} -eq 1 ]; then MAKE_ARGS+="INTERACTIVE=TRUE " else MAKE_ARGS+="INTERACTIVE=FALSE " fi MAKE_ARGS+=all if [ ${DEBUG} -eq 0 ]; then set +e cd ${BUILD_BASE} && make ${MAKE_ARGS} rc=$? set -e if [ $rc -gt 0 ]; then echo "Build: make all failed, exiting ..." rc=200 exit $rc fi else debug_make fi set +e make -C ${BUILD_BASE} prepare-cache rc=$? set -e if [ $rc -gt 0 ]; then echo "Build: make prepare-cache failed - exiting ..." rc=100 exit $rc fi echo "Copying built OPNFV .iso file to target directory ${BUILD_DIR} ..." rm -rf ${BUILD_DIR} mkdir -p ${BUILD_DIR} cp ${BUILD_BASE}/.versions ${BUILD_DIR} cp ${RESULT_DIR}/*.iso* ${BUILD_DIR} echo "Copying built OPNFV .rpm files to target directory ${BUILD_DIR} ..." cp ${BUILD_BASE}/*.rpm ${BUILD_DIR} cp ${BUILD_BASE}/noarch/*.rpm ${BUILD_DIR} if [ $POPULATE_CACHE -eq 1 ]; then if [ ! -z ${BUILD_CACHE_URI} ]; then echo "Building cache ..." tar --atime-preserve --dereference -C ${BUILD_BASE} -caf ${BUILD_BASE}/${LOCAL_CACHE_ARCH_NAME}.tgz ${CACHE_DIR} echo "Uploading cache ${BUILD_CACHE_URI}/${REMOTE_CACHE_ARCH_NAME}" ${REMOTE_ACCESS_METHD} -T ${BUILD_BASE}/${LOCAL_CACHE_ARCH_NAME}.tgz ${BUILD_CACHE_URI}/${REMOTE_CACHE_ARCH_NAME}.tgz rm ${BUILD_BASE}/${LOCAL_CACHE_ARCH_NAME}.tgz fi fi echo "Success!!!" exit 0 # # END of main ############################################################################