From 1c3c253f906e76b76f207f64c03a2c14c48647a1 Mon Sep 17 00:00:00 2001 From: Zhijiang Hu Date: Thu, 26 Oct 2017 07:16:59 -0400 Subject: Build kolla image in VM This PS: 1. Build kolla image in VM 2. Use sha512sum to check kolla image 3. Delete suffix dot when there is no ext_tag Change-Id: I94d99e3ff69c47cc247051fae812bfdb29ff0246 Signed-off-by: Zhijiang Hu (cherry picked from commit 377cae861b2c04d8934786acc4d07b41ba98acc5) --- ci/kolla-build-vm.sh | 334 ++++++++++++++++++++++++++++++++++++++++++++++++ ci/kolla-build.sh | 340 +++++++++++++------------------------------------ code/makefile_patch.sh | 52 +++++++- 3 files changed, 474 insertions(+), 252 deletions(-) create mode 100755 ci/kolla-build-vm.sh diff --git a/ci/kolla-build-vm.sh b/ci/kolla-build-vm.sh new file mode 100755 index 00000000..4880978c --- /dev/null +++ b/ci/kolla-build-vm.sh @@ -0,0 +1,334 @@ +#!/bin/bash +############################################################################## +# Copyright (c) 2016 ZTE Coreporation and others. +# hu.zhijiang@zte.com.cn +# lu.yao135@zte.com.cn +# 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 + +KOLLA_GIT="https://github.com/huzhijiang/kolla.git" +KOLLA_BRANCH="stable/ocata" +OPNFV_JOB_NAME= +KOLLA_TAG= +EXT_TAG= +KOLLA_GIT_VERSION= +KOLLA_IMAGE_VERSION= +WORK_DIR=/tmp +REGISTRY_SERVER_NAME=daisy-registry + +function usage +{ +cat << EOF +xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx +`basename $0`: Build Daisy4NFV's Kolla image package + +usage: `basename $0` [options] + +OPTIONS: + -l Kolla git repo location + -b Kolla git repo branch + -j OPNFV job name + -t Kolla git repo code tag(base version of image) + -e user defined tag extension(extended version) + -w working directroy + +Examples: +sudo `basename $0` -l https://git.openstack.org/openstack/kolla + -b stable/ocata + -j daisy-docker-build-euphrates + -t 4.0.2 + -e .1 + -w /tmp +xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx +EOF +} + +while getopts "l:b:j:t:e:w:h" OPTION +do + case $OPTION in + l) + KOLLA_GIT=${OPTARG} + ;; + b) + KOLLA_BRANCH=${OPTARG} + ;; + j) + OPNFV_JOB_NAME=${OPTARG} + ;; + t) + KOLLA_TAG=${OPTARG} + ;; + e) + EXT_TAG=${OPTARG} + ;; + w) + WORK_DIR=${OPTARG} + ;; + h) + usage + exit 0 + ;; + *) + echo "${OPTION} is not a valid argument" + usage + exit 1 + ;; + esac +done + +KOLLA_GIT_DIR=$WORK_DIR/kolla-git +REGISTRY_VOLUME_DIR=$WORK_DIR/registry +BUILD_OUTPUT_DIR=$WORK_DIR/kolla-build-output + +# OPNFV_JOB_NAME overwrites KOLLA_BRANCH +if [[ ! -z "$OPNFV_JOB_NAME" ]]; then + if [[ "$OPNFV_JOB_NAME" =~ "euphrates" ]]; then + KOLLA_BRANCH="stable/ocata" + elif [[ "$OPNFV_JOB_NAME" =~ "fraser" ]]; then + KOLLA_BRANCH="stable/pike" + else + # For master branch + KOLLA_BRANCH="stable/pike" + fi +fi + +function pre_check { + echo "Pre setup" + if [ $KOLLA_BRANCH == "stable/mitaka" ] ; then + yum install -y epel-release centos-release-openstack-mitaka + RPM_REQUIRES="python-docker-py:1.6 python-pbr:1.6 python-jinja2:2.8 \ + python-gitdb:0.6.4 GitPython:1.0.1 python-six:1.9.0 \ + python2-oslo-config:3.7.0 python-beautifulsoup4:4.4.1 \ + python2-setuptools:16.0.0 python2-crypto:2.6 docker-engine:1.12" + elif [ $KOLLA_BRANCH == "stable/newton" ] ; then + yum install -y epel-release centos-release-openstack-newton + RPM_REQUIRES="python-docker-py:1.6 python-pbr:1.6 python-jinja2:2.8 \ + python-gitdb:0.6.4 GitPython:1.0.1 python-six:1.9.0 \ + python2-oslo-config:3.14.0 python-netaddr:0.7.13 \ + python2-setuptools:16.0.0 python2-crypto:2.6 docker-engine:1.12 \ + centos-release-openstack-newton:1 epel-release:7" + elif [ $KOLLA_BRANCH == "stable/ocata" ] ; then + yum install -y epel-release centos-release-openstack-ocata + yum update -y + yum install -y python-docker-py python2-pbr python-jinja2 \ + python-gitdb GitPython python-six \ + python2-oslo-config python-netaddr \ + python2-setuptools python2-crypto docker + RPM_REQUIRES="python-docker-py:1.10 python2-pbr:1.10 python-jinja2:2.8 \ + python-gitdb:0.6.4 GitPython:1.0.1 python-six:1.10.0 \ + python2-oslo-config:3.22.0 python-netaddr:0.7.18 \ + python2-setuptools:22.0.0 python2-crypto:2.6 docker:1.12 \ + centos-release-openstack-ocata:1 epel-release:7" + elif [ $KOLLA_BRANCH == "stable/pike" ] ; then + yum install -y epel-release centos-release-openstack-pike + yum update -y + yum install -y python2-docker python2-pbr python2-jinja2 \ + python-gitdb GitPython python2-six \ + python2-oslo-config python-netaddr \ + python2-setuptools python2-crypto docker + RPM_REQUIRES="python2-docker:2.4.2 python2-pbr:3.1.1 python2-jinja2:2.8 \ + python-gitdb:0.6.4 GitPython:1.0.1 python2-six:1.10.0 \ + python2-oslo-config:3.22.0 python-netaddr:0.7.18 \ + python2-setuptools:22.0.0 python2-crypto:2.6 docker:1.12 \ + centos-release-openstack-pike:1 epel-release:7" + else + exit 1 + fi + + for package_version in $RPM_REQUIRES + do + package=`echo $package_version | awk -F: '{print $1}'` + expversion=`echo $package_version | awk -F: '{print $2}'` + + echo "Step:1 Check if $package existed" + rpm -q $package &> /dev/null + if [ "$?" != "0" ] ; then + echo "$package not installed" + exit 1 + fi + + echo "Step:2 Check if $package version meets the requirement" + realversion=$(rpm -q --queryformat '%{VERSION}' $package) + smallestversion=`printf "$realversion\n$expversion\n" | sort -V | head -1` + if [ "$smallestversion" != "$expversion" ] ; then + echo "$package version $realversion DOES NOT meet the \ + requirement version $expversion" + exit 1 + fi + done + + yum install -y gcc + yum install -y python-devel + + # Some packages must be installed by pip. + # TODO: Check version of packages installed by pip just like what we do for RPM above. + rpm -e python-tox || true + rpm -e python-virtualenv || true + rpm -e python-py || true + yum install -y python2-pip + pip install tox + + # Just make sure docker is working. + service docker restart +} + +function cleanup_registry_server { + echo "Cleaning registry server" + containers_to_kill=$(sudo docker ps --filter "name=$REGISTRY_SERVER_NAME" \ + --format "{{.Names}}" -a) + + if [[ ! -z "$containers_to_kill" ]]; then + volumes_to_remove=$(sudo docker inspect -f \ + '{{range .Mounts}} {{printf "%s\n" .Name }}{{end}}' \ + ${containers_to_kill} | egrep -v '(^\s*$)' | sort | uniq) + + echo "Stopping containers... $containers_to_kill" + (sudo docker stop -t 2 ${containers_to_kill} 2>&1) > /dev/null + echo "Removing containers... $containers_to_kill" + (sudo docker rm -v -f ${containers_to_kill} 2>&1) > /dev/null + + if [[ ! -z "$volumes_to_remove" ]]; then + echo "Removing volumes... $volumes_to_remove" + (sudo docker volume rm ${volumes_to_remove} 2>&1) || true > /dev/null + fi + fi +} + +function cleanup_registry_data { + echo "Cleaning registry data dir" + rm -rf $REGISTRY_VOLUME_DIR + mkdir -p $REGISTRY_VOLUME_DIR +} + +function cleanup_kolla_image { + echo "Cleaning Kolla images" + if [ -d $KOLLA_GIT_DIR/kolla ] ; then + pushd $KOLLA_GIT_DIR/kolla + (./tools/cleanup-images 2>&1) || true > /dev/null; + popd + fi +} + +function start_registry_server { + echo "Starting registry server" + sudo docker run -d -p 5000:5000 --restart=always \ + -e REGISTRY_STORAGE_FILESYSTEM_ROOTDIRECTORY=/tmp/registry \ + -v $REGISTRY_VOLUME_DIR:/tmp/registry \ + --name $REGISTRY_SERVER_NAME registry:2 +} + +function pack_registry_data { + echo "Packaging registry data" + datetag=$(date +%y%m%d%H%M%S) + + #TODO: not compatible with "master" branch + version=$(echo $KOLLA_BRANCH | awk -F'/' '{print $2}') + + if [ ! -d $BUILD_OUTPUT_DIR ] ; then + mkdir -p $BUILD_OUTPUT_DIR + fi + + pushd $BUILD_OUTPUT_DIR + echo $KOLLA_GIT_VERSION > registry-$version-$datetag.version + echo "branch = $KOLLA_BRANCH" >> registry-$version-$datetag.version + echo "tag = $KOLLA_IMAGE_VERSION" >> registry-$version-$datetag.version + echo "date = $datetag" >> registry-$version-$datetag.version + tar czf kolla-image-$version-$datetag.tgz $REGISTRY_VOLUME_DIR \ + registry-$version-$datetag.version + rm -rf registry-$version-$datetag.version + popd +} + +function update_kolla_code { + echo "Updating Kolla code" + + rm -rf $KOLLA_GIT_DIR + mkdir -p $KOLLA_GIT_DIR + + pushd $KOLLA_GIT_DIR + git clone $KOLLA_GIT + pushd $KOLLA_GIT_DIR/kolla + git checkout $KOLLA_BRANCH + + if [[ ! -z "$KOLLA_TAG" ]]; then + git checkout $KOLLA_TAG + fi + + KOLLA_GIT_VERSION=$(git log -1 --pretty="%H") + tox -e genconfig + KOLLA_IMAGE_VERSION=$(cat $KOLLA_GIT_DIR/kolla/etc/kolla/kolla-build.conf \ + | grep "#tag" | gawk -F' = ' '{print $2}') + + if [[ ! -z "$KOLLA_TAG" ]]; then + if ["$KOLLA_TAG" != $KOLLA_IMAGE_VERSION] ; then + echo "tag in git: $KOLLA_TAG, while tag in code: $KOLLA_IMAGE_VERSION" + exit 1 + fi + fi + + popd + popd +} + +function config_kolla { + rm -rf /etc/kolla/kolla-build.conf + KOLLA_IMAGE_VERSION="${KOLLA_IMAGE_VERSION}${EXT_TAG}" +} + +function start_build { + echo "Start to build Kolla image" + REGISTRY_PARAM="--registry 127.0.0.1:5000 --push --tag $KOLLA_IMAGE_VERSION" + pushd $KOLLA_GIT_DIR/kolla + + # Some of the images may be failed to built out but is OK + # so we use "|| true" here. + # TODO: We can impl. some checks to see if the images that + # we really care are built successfully. + tools/build.py $REGISTRY_PARAM || true; + popd +} + +exitcode="" +error_trap() +{ + local rc=$? + + set +e + + if [ -z "$exitcode" ]; then + exitcode=$rc + fi + + echo "Image build failed with $exitcode" + + exit $exitcode +} + +trap "error_trap" EXIT SIGTERM + +pre_check + +# Try to cleanup images of the last failed run, if any. +cleanup_kolla_image +update_kolla_code +config_kolla +cleanup_kolla_image + +# Make sure there is no garbage in the registry server. +cleanup_registry_server +cleanup_registry_data +start_registry_server + +start_build +cleanup_kolla_image +pack_registry_data + +# TODO: Upload to OPNFV artifacts repo. + diff --git a/ci/kolla-build.sh b/ci/kolla-build.sh index 2ad5437a..44b1c038 100755 --- a/ci/kolla-build.sh +++ b/ci/kolla-build.sh @@ -13,297 +13,135 @@ set -o errexit set -o nounset set -o pipefail -KOLLA_GIT="https://github.com/huzhijiang/kolla.git" -KOLLA_BRANCH="stable/ocata" -OPNFV_JOB_NAME= -KOLLA_TAG= -EXT_TAG= -KOLLA_GIT_VERSION= -KOLLA_IMAGE_VERSION= -WORK_DIR=/tmp -REGISTRY_SERVER_NAME=daisy-registry +VM_PARAMS=$@ -function usage +exitcode="" +error_trap() { -cat << EOF -xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx -`basename $0`: Build Daisy4NFV's Kolla image package + local rc=$? + + set +e -usage: `basename $0` [options] + if [ -z "$exitcode" ]; then + exitcode=$rc + fi -OPTIONS: - -l Kolla git repo location - -b Kolla git repo branch - -j OPNFV job name - -t Kolla git repo code tag(base version of image) - -e user defined tag extension(extended version) - -w working directroy + echo "Image build failed with $exitcode" -Examples: -sudo `basename $0` -l https://git.openstack.org/openstack/kolla - -b stable/ocata - -j daisy-docker-build-euphrates - -t 4.0.2 - -e 1 - -w /tmp -xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx -EOF + exit $exitcode } -while getopts "l:b:j:t:e:h" OPTION +WORK_DIR=/tmp +while getopts "l:b:j:t:e:w:h" OPTION do + #Only get what we need case $OPTION in - l) - KOLLA_GIT=${OPTARG} - ;; - b) - KOLLA_BRANCH=${OPTARG} - ;; - j) - OPNFV_JOB_NAME=${OPTARG} - ;; - t) - KOLLA_TAG=${OPTARG} - ;; - e) - EXT_TAG=${OPTARG} - ;; w) WORK_DIR=${OPTARG} ;; - h) - usage - exit 0 - ;; - *) - echo "${OPTION} is not a valid argument" - usage - exit 1 - ;; esac done -KOLLA_GIT_DIR=$WORK_DIR/kolla-git -REGISTRY_VOLUME_DIR=$WORK_DIR/registry BUILD_OUTPUT_DIR=$WORK_DIR/kolla-build-output -# OPNFV_JOB_NAME overwrites KOLLA_BRANCH -if [[ ! -z "$OPNFV_JOB_NAME" ]]; then - if [[ "$OPNFV_JOB_NAME" =~ "euphrates" ]]; then - KOLLA_BRANCH="stable/ocata" - elif [[ "$OPNFV_JOB_NAME" =~ "fraser" ]]; then - KOLLA_BRANCH="stable/pike" - else - # For master branch - KOLLA_BRANCH="stable/pike" -fi - - -function pre_check { - echo "Pre setup" - if [ $KOLLA_BRANCH == "stable/mitaka" ] ; then - RPM_REQUIRES="python-docker-py:1.6 python-pbr:1.6 python-jinja2:2.8 \ - python-gitdb:0.6.4 GitPython:1.0.1 python-six:1.9.0 \ - python2-oslo-config:3.7.0 python-beautifulsoup4:4.4.1 \ - python2-setuptools:16.0.0 python2-crypto:2.6 docker-engine:1.12" - elif [ $KOLLA_BRANCH == "stable/newton" ] ; then - RPM_REQUIRES="python-docker-py:1.6 python-pbr:1.6 python-jinja2:2.8 \ - python-gitdb:0.6.4 GitPython:1.0.1 python-six:1.9.0 \ - python2-oslo-config:3.14.0 python-netaddr:0.7.13 \ - python2-setuptools:16.0.0 python2-crypto:2.6 docker-engine:1.12 \ - centos-release-openstack-newton:1 epel-release:7" - elif [ $KOLLA_BRANCH == "stable/ocata" ] ; then - RPM_REQUIRES="python-docker-py:1.10 python2-pbr:1.10 python-jinja2:2.8 \ - python-gitdb:0.6.4 GitPython:1.0.1 python-six:1.10.0 \ - python2-oslo-config:3.22.0 python-netaddr:0.7.18 \ - python2-setuptools:22.0.0 python2-crypto:2.6 docker-engine:1.12 \ - centos-release-openstack-ocata:1 epel-release:7" - else - exit 1 - fi - - for package_version in $RPM_REQUIRES - do - package=`echo $package_version | awk -F: '{print $1}'` - expversion=`echo $package_version | awk -F: '{print $2}'` - - echo "Step:1 Check if $package existed" - rpm -q $package &> /dev/null - if [ "$?" != "0" ] ; then - echo "$package not installed" - exit 1 - fi - - echo "Step:2 Check if $package version meets the requirement" - realversion=$(rpm -q --queryformat '%{VERSION}' $package) - smallestversion=`printf "$realversion\n$expversion\n" | sort -V | head -1` - if [ "$smallestversion" != "$expversion" ] ; then - echo "$package version $realversion DOES NOT meet the \ - requirement version $expversion" - exit 1 - fi - done +############Builder VM operations################ - # Some packages must be installed by pip. - # TODO: Check version of packages installed by pip just like what we do for RPM above. - rpm -e tox || true - rpm -e python-virtualenv || true - rpm -e python-py || true - pip install tox +SCRIPT_PATH=$(readlink -f $(dirname $0)) +WORKSPACE=$(cd ${SCRIPT_PATH}/..; pwd) +DEPLOY_PATH=$WORKSPACE/deploy - # Just make sure docker is working. - service docker restart -} +# VM configurations +VMDELOY_DAISY_SERVER_NET=$WORKSPACE/templates/virtual_environment/networks/daisy.xml +VMDEPLOY_DAISY_SERVER_VM=$WORKSPACE/templates/virtual_environment/vms/daisy.xml -function cleanup_registry_server { - echo "Cleaning registry server" - containers_to_kill=$(sudo docker ps --filter "name=$REGISTRY_SERVER_NAME" \ - --format "{{.Names}}" -a) +# read deploy parameters from $DHA_CONF, any DHA_CONF is OK for us, so we choose zte-virtual1 +DHA_CONF=$WORKSPACE/deploy/config/vm_environment/zte-virtual1/deploy.yml +PARAS_FROM_DEPLOY=`python $WORKSPACE/deploy/get_conf.py --dha $DHA_CONF` +DAISY_IP=`echo $PARAS_FROM_DEPLOY | cut -d " " -f 2` +DAISY_PASSWD=`echo $PARAS_FROM_DEPLOY | cut -d " " -f 3` +PARAS_IMAGE=${PARAS_FROM_DEPLOY#* * * } - if [[ ! -z "$containers_to_kill" ]]; then - volumes_to_remove=$(sudo docker inspect -f \ - '{{range .Mounts}} {{printf "%s\n" .Name }}{{end}}' \ - ${containers_to_kill} | egrep -v '(^\s*$)' | sort | uniq) +# qcow2 image modifier location +CREATE_QCOW2_PATH=$WORKSPACE/tools +# temp storage for qcow2 image modifier +IMWORKDIR=${IMWORKDIR:-/tmp/workdir/daisy} - echo "Stopping containers... $containers_to_kill" - (sudo docker stop -t 2 ${containers_to_kill} 2>&1) > /dev/null - echo "Removing containers... $containers_to_kill" - (sudo docker rm -v -f ${containers_to_kill} 2>&1) > /dev/null +# set extra ssh paramters +SSH_PARAS="-o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no" - if [[ ! -z "$volumes_to_remove" ]]; then - echo "Removing volumes... $volumes_to_remove" - (sudo docker volume rm ${volumes_to_remove} 2>&1) || true > /dev/null - fi - fi -} - -function cleanup_registry_data { - echo "Cleaning registry data dir" - rm -rf $REGISTRY_VOLUME_DIR - mkdir -p $REGISTRY_VOLUME_DIR -} +# work space and config files' path(absolute) in daisy node +REMOTE_SPACE=${REMOTE_SPACE:-/home/daisy} -function cleanup_kolla_image { - echo "Cleaning Kolla images" - if [ -d $KOLLA_GIT_DIR/kolla ] ; then - pushd $KOLLA_GIT_DIR/kolla - (./tools/cleanup-images 2>&1) || true > /dev/null; - popd +function clean_up_daisy_vm() +{ + local vms=$(virsh list --all | tail -n +3 | awk '{print $2}') + local active_vms=$(virsh list | tail -n +3 | awk '{print $2}') + vm_name=daisy + if [[ $(echo $vms | tr " " "\n" | grep ^$vm_name$) ]]; then + [[ $(echo $active_vms | tr " " "\n" | grep ^$vm_name$) ]] && virsh destroy $vm_name + virsh undefine $vm_name fi } -function start_registry_server { - echo "Starting registry server" - sudo docker run -d -p 5000:5000 --restart=always \ - -e REGISTRY_STORAGE_FILESYSTEM_ROOTDIRECTORY=/tmp/registry \ - -v $REGISTRY_VOLUME_DIR:/tmp/registry \ - --name $REGISTRY_SERVER_NAME registry:2 +function clean_up_daisy_vnetworks() +{ + local nets=$(virsh net-list --all | tail -n +3 |awk '{print $1}') + local active_nets=$(virsh net-list | tail -n +3 |awk '{print $1}') + for net_template in ${VMDELOY_DAISY_SERVER_NET}; do + network_name=$(grep "" $net_template | awk -F "<|>" '{print $3}') + if [[ $(echo $nets | tr " " "\n" | grep ^$network_name$) ]]; then + [[ $(echo $active_nets | tr " " "\n" | grep ^$network_name$) ]] && virsh net-destroy $network_name + virsh net-undefine $network_name + fi + done } -function pack_registry_data { - echo "Packaging registry data" - datetag=$(date +%y%m%d%H%M%S) - - #TODO: not compatible with "master" branch - version=$(echo $KOLLA_BRANCH | awk -F'/' '{print $2}') - - if [ ! -d $BUILD_OUTPUT_DIR ] ; then - mkdir -p $BUILD_OUTPUT_DIR - fi - - pushd $BUILD_OUTPUT_DIR - echo $KOLLA_GIT_VERSION > registry-$version-$datetag.version - echo "branch = $KOLLA_BRANCH" >> registry-$version-$datetag.version - echo "tag = $KOLLA_IMAGE_VERSION" >> registry-$version-$datetag.version - echo "date = $datetag" >> registry-$version-$datetag.version - tar czf kolla-image-$version-$datetag.tgz $REGISTRY_VOLUME_DIR \ - registry-$version-$datetag.version - rm -rf registry-$version-$datetag.version - popd +function clean_up_daisy_vm_and_networks() +{ + echo "====== Clean up Daisy VM and networks ======" + clean_up_daisy_vm + clean_up_daisy_vnetworks } -function update_kolla_code { - echo "Updating Kolla code" - - rm -rf $KOLLA_GIT_DIR - mkdir -p $KOLLA_GIT_DIR - - pushd $KOLLA_GIT_DIR - git clone $KOLLA_GIT - pushd $KOLLA_GIT_DIR/kolla - git checkout $KOLLA_BRANCH - - if [[ ! -z "$KOLLA_TAG" ]]; then - git checkout $KOLLA_TAG - fi +function create_daisy_vm_and_networks() +{ + echo "====== Create Daisy VM ======" + $CREATE_QCOW2_PATH/daisy-img-modify.sh -c $CREATE_QCOW2_PATH/centos-img-modify.sh -w $IMWORKDIR -a $DAISY_IP $PARAS_IMAGE - KOLLA_GIT_VERSION=$(git log -1 --pretty="%H") - tox -e genconfig - KOLLA_IMAGE_VERSION=$(cat $KOLLA_GIT_DIR/kolla/etc/kolla/kolla-build.conf \ - | grep "#tag" | gawk -F' = ' '{print $2}') + virsh net-define $VMDELOY_DAISY_SERVER_NET + virsh net-start daisy1 - if [[ ! -z "$KOLLA_TAG" ]]; then - if ["$KOLLA_TAG" != $KOLLA_IMAGE_VERSION] ; then - echo "tag in git: $KOLLA_TAG, while tag in code: $KOLLA_IMAGE_VERSION" - exit 1 - fi - fi + virsh define $VMDEPLOY_DAISY_SERVER_VM + virsh start daisy - popd - popd + #wait for the daisy1 network start finished for execute trustme.sh + #here sleep 40 just needed in Dell blade server + #for E9000 blade server we only have to sleep 20 + sleep 40 } -function config_kolla { - rm -rf /etc/kolla/kolla-build.conf - KOLLA_IMAGE_VERSION="${KOLLA_IMAGE_VERSION}.${EXT_TAG}" -} - -function start_build { - echo "Start to build Kolla image" - REGISTRY_PARAM="--registry 127.0.0.1:5000 --push --tag $KOLLA_IMAGE_VERSION" - pushd $KOLLA_GIT_DIR/kolla - - # Some of the images may be failed to built out but is OK - # so we use "|| true" here. - # TODO: We can impl. some checks to see if the images that - # we really care are built successfully. - tools/build.py $REGISTRY_PARAM || true; - popd -} - -exitcode="" -error_trap() +function build_kolla_image_in_daisy_vm() { - local rc=$? - - set +e - - if [ -z "$exitcode" ]; then - exitcode=$rc + echo "====== build_kolla_image_in_daisy_vm ======" + $DEPLOY_PATH/trustme.sh $DAISY_IP $DAISY_PASSWD + ssh $SSH_PARAS $DAISY_IP "if [[ -f ${REMOTE_SPACE} || -d ${REMOTE_SPACE} ]]; then rm -fr ${REMOTE_SPACE}; fi" + scp -r $WORKSPACE root@$DAISY_IP:${REMOTE_SPACE} + ssh $SSH_PARAS $DAISY_IP "${REMOTE_SPACE}/ci/kolla-build-vm.sh $VM_PARAMS" + rc=$? + if [ $rc -ne 0 ]; then + echo "daisy install failed" + exit 1 + else + echo "daisy install successfully" fi - echo "Image build failed with $exitcode" - - exit $exitcode + rm -rf $BUILD_OUTPUT_DIR + mkdir -p $BUILD_OUTPUT_DIR + scp -r root@$DAISY_IP:$BUILD_OUTPUT_DIR $WORK_DIR } - trap "error_trap" EXIT SIGTERM -pre_check -# Try to cleanup images of the last failed run, if any. -cleanup_kolla_image -update_kolla_code -config_kolla -cleanup_kolla_image - -# Make sure there is no garbage in the registry server. -cleanup_registry_server -cleanup_registry_data -start_registry_server - -start_build -cleanup_kolla_image -pack_registry_data - -# TODO: Upload to OPNFV artifacts repo. +clean_up_daisy_vm_and_networks +create_daisy_vm_and_networks +build_kolla_image_in_daisy_vm diff --git a/code/makefile_patch.sh b/code/makefile_patch.sh index 5e734910..16988a64 100755 --- a/code/makefile_patch.sh +++ b/code/makefile_patch.sh @@ -76,9 +76,59 @@ function check_or_download_file() popd > /dev/null } +function check_or_download_file_sha512sum() +{ + file_path=$1 + file_url=$2 + file_name=$(basename $2) + if [ $# -eq 3 ]; then sha512sum_url=$3; else sha512sum_url=""; fi + + pushd $file_path >/dev/null + + count=0 + MAX_DOWNLOAD_TIMES=2 + while [ $count -lt ${MAX_DOWNLOAD_TIMES} ]; do + count=$[count + 1] + + if [ ! -f ${file_name} ]; then + echo "Begin to download ${file_name}" + wget --progress=dot:giga ${file_url} + fi + + if [ ! -z ${sha512sum_url} ]; then + rm -f $(basename ${sha512sum_url}) + wget ${sha512sum_url} + sha512sum -c $(basename ${sha512sum_url}) + if [ $? -ne 0 ]; then + echo "sha512sum check failed !" + rm -f ${file_name} + else + echo "sha512sum_url check succeeded !" + count=${MAX_DOWNLOAD_TIMES} + fi + else + wget --spider $file_url -o tmp_filesize + origin_size=$(cat tmp_filesize | grep Length | awk '{print $2}') + rm tmp_filesize + local_size=$(stat -c %s ${file_path}/${file_name} | tr -d '\n') + if [ ${local_size} -ne ${origin_size} ]; then + echo "The local ${file_name} is incomplete." + rm -f ${file_name} + else + echo "File ${file_path}/${file_name} is ok." + count=${MAX_DOWNLOAD_TIMES} + fi + fi + done + + popd > /dev/null +} + + + if [ ! -d $CACHE_PATH ]; then mkdir -p $CACHE_PATH ; fi check_or_download_file $CACHE_PATH $isourl -check_or_download_file $CACHE_PATH $imageserver/${imagename} ${imageserver}/${imagename}.md5 +check_or_download_file_sha512sum $CACHE_PATH $imageserver/${imagename} ${imageserver}/${imagename}.sha512sum check_or_download_file $CACHE_PATH "http://daisycloud.org/static/files/registry-server.tar" check_or_download_file $CACHE_PATH ${cirros_url} -- cgit 1.2.3-korg