-# Copyright (c) 2018 Cisco and/or its affiliates.
+# Copyright (c) 2019 Cisco and/or its affiliates.
+# Copyright (c) 2019 PANTHEON.tech and/or its affiliates.
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at:
function gather_build () {
- set -exuo pipefail
-
# Variables read:
# - TEST_CODE - String affecting test selection, usually jenkins job name.
# - DOWNLOAD_DIR - Path to directory pybot takes the build to test from.
# - ${DOWNLOAD_DIR} - Files needed by tests are gathered here.
# Functions called:
# - die - Print to stderr and exit, defined in common.sh
+ # - gather_os - Parse os parameter for OS/distro name.
# - gather_dpdk, gather_vpp, gather_ligato - See their definitions.
# Multiple other side effects are possible,
# see functions called from here for their current description.
# TODO: Separate DUT-from-TEST_CODE from gather-for-DUT,
# when the first one becomes relevant for per_patch.
+ set -exuo pipefail
+
pushd "${DOWNLOAD_DIR}" || die "Pushd failed."
case "${TEST_CODE}" in
*"hc2vpp"*)
function gather_dpdk () {
- set -exuo pipefail
-
# Ensure latest DPDK archive is downloaded.
#
# Variables read:
# Functions called:
# - die - Print to stderr and exit, defined in common.sh
+ set -exuo pipefail
+
dpdk_repo="https://fast.dpdk.org/rel"
# Use downloaded packages with specific version
if [[ "${TEST_CODE}" == *"daily"* ]] || \
die "Composite piped command failed."
}
else
- echo "Downloading DPDK packages of specific version from repo..."
- # TODO: Can we autodetect this based on what CSIT-stable VPP uses?
- dpdk_stable_ver="dpdk-18.08.tar.xz"
+ echo "Downloading DPDK package of specific version from repo ..."
+ # Downloading DPDK version based on what VPP is using. Currently
+ # it is not easy way to detect from VPP version automatically.
+ dpdk_stable_ver="$(< "${CSIT_DIR}/DPDK_VPP_VER")".tar.xz || {
+ die "Failed to read DPDK VPP version!"
+ }
fi
# TODO: Use "wget -N" instead checking for file presence?
if [[ ! -f "${dpdk_stable_ver}" ]]; then
function gather_ligato () {
- set -exuo pipefail
-
# Build docker image (with vpp, ligato and vpp-agent),
# and put it to ${DOWNLOAD_DIR}/.
#
# so maybe it is not worth introducing fragments/functions for the blocks.
# TODO: This fragment is too long anyway, split it up.
+ set -exuo pipefail
+
gather_vpp || die "The function should have died on error."
- # Extract VPP API to specific folder
- # FIXME: Make sure /tmp/vpp/ exists. Should we clean it?
+ mkdir -p /tmp/vpp && rm -f /tmp/vpp/* || {
+ die "Failed to create temporary directory!"
+ }
dpkg -x "${DOWNLOAD_DIR}/vpp_"*".deb" "/tmp/vpp" || {
die "Failed to extract VPP packages for kubernetes!"
}
ligato_repo_url="https://github.com/ligato/"
- vpp_agent_stable_ver="$(cat "${CSIT_DIR}/VPP_AGENT_STABLE_VER")" || {
- die "Cat failed."
+ vpp_agent_stable_ver="$(< "${CSIT_DIR}/VPP_AGENT_STABLE_VER")" || {
+ die "Failed to read vpp-agent stable version!"
}
- docker_deb="docker-ce_18.03.0~ce-0~ubuntu_amd64.deb"
- # Clone & checkout stable vpp-agent
- cd "${CSIT_DIR}" || die "Change directory failed."
- git clone -b "${vpp_agent_stable_ver}" --single-branch \
+ # Clone & checkout stable vpp-agent.
+ cd "${CSIT_DIR}" || die "Change directory failed!"
+ git clone -b master --single-branch \
"${ligato_repo_url}/vpp-agent" "vpp-agent" || {
die "Failed to run: git clone ${ligato_repo_url}/vpp-agent!"
}
- cd "vpp-agent" || die "Change directory failed."
-
- # Install Docker
- url_prefix="https://download.docker.com/linux/ubuntu/dists/xenial/pool"
- # URL is not in quotes, calling command from variable keeps them.
- wget_command=("wget" "-nv" "${url_prefix}/stable/amd64/${docker_deb}")
- "${wget_command[@]}" || die "Failed to download Docker package!"
+ cd "vpp-agent" || die "Change directory failed!"
- sudo dpkg -i "${docker_deb}" || die "Failed to install Docker!"
+ # Install Docker.
+ curl -fsSL https://get.docker.com | sudo bash || {
+ die "Failed to install Docker package!"
+ }
- # Pull ligato/dev_vpp_agent docker image and re-tag as local
+ # Pull ligato/dev_vpp_agent docker image and re-tag as local.
sudo docker pull "ligato/dev-vpp-agent:${vpp_agent_stable_ver}" || {
die "Failed to pull Docker image!"
}
-
- first_arg="ligato/dev-vpp-agent:${vpp_agent_stable_ver}"
- sudo docker tag "${first_arg}" "dev_vpp_agent:latest" || {
+ params=(ligato/dev-vpp-agent:${vpp_agent_stable_ver} dev_vpp_agent:latest)
+ sudo docker tag "${params[@]}" || {
die "Failed to tag Docker image!"
}
- # Start dev_vpp_agent container as daemon
+ # Start dev_vpp_agent container as daemon.
sudo docker run --rm -itd --name "agentcnt" "dev_vpp_agent" bash || {
die "Failed to run Docker image!"
}
- # Copy latest vpp api into running container
+ # Copy latest vpp api into running container.
sudo docker exec agentcnt rm -rf "agentcnt:/usr/share/vpp/api" || {
die "Failed to remove previous API!"
}
die "Failed to copy files Docker image!"
}
- # Recompile vpp-agent
+ # Recompile vpp-agent.
script_arg=". ~/.bashrc; cd /go/src/github.com/ligato/vpp-agent"
script_arg+=" && make generate && make install"
sudo docker exec -i agentcnt script -qec "${script_arg}" || {
}
for f in "${DOWNLOAD_DIR}"/*; do
sudo docker cp "$f" "agentcnt:/opt/vpp-agent/dev/vpp/build-root"/ || {
- die "Failed to copy files Docker image!"
+ die "Failed to copy files to Docker image!"
}
done
- # Save container state
+ # Save container state.
sudo docker commit "$(sudo docker ps -q)" "dev_vpp_agent:latest" || {
die "Failed to commit state of Docker image!"
}
- # Build prod_vpp_agent docker image
+ # Build prod_vpp_agent docker image.
cd "docker/prod" || die "Change directory failed."
sudo docker build --tag "prod_vpp_agent" --no-cache "." || {
die "Failed to build Docker image!"
}
- # Export Docker image
+ # Export Docker image.
sudo docker save "prod_vpp_agent" | gzip > "prod_vpp_agent.tar.gz" || {
die "Failed to save Docker image!"
}
docker_image="$(readlink -e "prod_vpp_agent.tar.gz")" || {
- die "Readlink failed."
+ die "Failed to get Docker image path!"
}
- rm -r "${DOWNLOAD_DIR}/vpp"* || die "Rm failed."
- mv "${docker_image}" "${DOWNLOAD_DIR}"/ || die "Mv failed."
+ rm -r "${DOWNLOAD_DIR}/vpp"* || die "Failed to remove VPP packages!"
+ mv "${docker_image}" "${DOWNLOAD_DIR}"/ || die "Failed to move image!"
}
function gather_vpp () {
- set -exuo pipefail
-
# Variables read:
# - BASH_FUNCTION_DIR - Bash directory with functions.
# - TEST_CODE - The test selection string from environment or argument.
# - DOWNLOAD_DIR - Path to directory pybot takes the build to test from.
# - CSIT_DIR - Path to existing root of local CSIT git repository.
+ # Variables set:
+ # - VPP_VERSION - VPP stable version under test.
# Files read:
# - ${CSIT_DIR}/DPDK_STABLE_VER - DPDK version to use
# by csit-vpp not-timed jobs.
- # - ${CSIT_DIR}/VPP_STABLE_VER_UBUNTU - VPP version to use by those.
- # - ../vpp*.deb - Relative to ${DOWNLOAD_DIR}, copied for vpp-csit jobs.
+ # - ${CSIT_DIR}/VPP_STABLE_VER_UBUNTU - Ubuntu VPP version to usee.
+ # - ../vpp*.deb|rpm - Relative to ${DOWNLOAD_DIR}, copied for vpp-csit jobs.
# Directories updated:
# - ${DOWNLOAD_DIR}, vpp-*.deb files are copied here for vpp-csit jobs.
- # - ./ - Assumed ${DOWNLOAD_DIR}, vpp-*.deb files
+ # - ./ - Assumed ${DOWNLOAD_DIR}, vpp-*.deb|rpm files
# are downloaded here for csit-vpp.
# Functions called:
# - die - Print to stderr and exit, defined in common_functions.sh
# - ${CSIT_DIR}/resources/tools/scripts/download_install_vpp_pkgs.sh
# - Should download and extract requested files to ./.
+ set -exuo pipefail
+
case "${TEST_CODE}" in
# Not csit-vpp as this code is re-used by ligato gathering.
"csit-"*)
- # Use downloaded packages with specific version
+ # Use downloaded packages with specific version.
if [[ "${TEST_CODE}" == *"daily"* ]] || \
- [[ "${TEST_CODE}" == *"weekly"* ]] || \
- [[ "${TEST_CODE}" == *"timed"* ]];
+ ([[ "${TEST_CODE}" == *"weekly"* ]] && \
+ [[ "${TEST_CODE}" != *"device"* ]]) || \
+ [[ "${TEST_CODE}" == *"semiweekly"* ]];
then
warn "Downloading latest VPP packages from Packagecloud."
else
warn "Downloading stable VPP packages from Packagecloud."
- DKMS_VERSION="$(<"${CSIT_DIR}/DPDK_STABLE_VER")" || {
- die "Read DPDK stable version failed."
- }
- VPP_VERSION="$(<"${CSIT_DIR}/VPP_STABLE_VER_UBUNTU")" || {
+ VPP_VERSION="$(<"${CSIT_DIR}/${VPP_VER_FILE}")" || {
die "Read VPP stable version failed."
}
fi
download_artifacts || die
;;
"vpp-csit-"*)
- # Use local built packages.
- mv "${DOWNLOAD_DIR}"/../"vpp"*".deb" "${DOWNLOAD_DIR}"/ || {
+ # Use locally built packages.
+ mv "${DOWNLOAD_DIR}"/../"vpp"*".${PKG_SUFFIX}" "${DOWNLOAD_DIR}"/ || {
die "Move command failed."
}
;;