X-Git-Url: https://gerrit.fd.io/r/gitweb?p=csit.git;a=blobdiff_plain;f=resources%2Flibraries%2Fbash%2Ffunction%2Fgather.sh;h=56b148d1e17e15bb476764f338d836279a7edfe5;hp=e03065249474ede9b85a6a4ac0314794df7e7565;hb=ea6e8be86d47b288df5e11ca5515f6bda71dbd08;hpb=07eb18d206e09d3b9915792a8f6c475bb01e255a diff --git a/resources/libraries/bash/function/gather.sh b/resources/libraries/bash/function/gather.sh index e030652494..56b148d1e1 100644 --- a/resources/libraries/bash/function/gather.sh +++ b/resources/libraries/bash/function/gather.sh @@ -1,4 +1,5 @@ -# 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: @@ -34,6 +35,7 @@ function gather_build () { # - ${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. @@ -97,9 +99,12 @@ function gather_dpdk () { 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 @@ -152,50 +157,46 @@ function gather_ligato () { 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." + 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!" - - 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!" } @@ -203,7 +204,7 @@ function gather_ligato () { 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}" || { @@ -216,28 +217,28 @@ function gather_ligato () { } 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!" } @@ -250,14 +251,16 @@ function gather_vpp () { # - 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 @@ -268,18 +271,16 @@ function gather_vpp () { 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 @@ -287,8 +288,8 @@ function gather_vpp () { 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." } ;;