CSIT changes to support new Centos 7 device testing container image.
[csit.git] / resources / libraries / bash / function / gather.sh
index f490c80..56b148d 100644 (file)
@@ -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."
-
-    # 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!"
     }
@@ -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!"
 }
 
 
@@ -246,17 +247,20 @@ 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
@@ -267,36 +271,25 @@ function gather_vpp () {
     case "${TEST_CODE}" in
         # Not csit-vpp as this code is re-used by ligato gathering.
         "csit-"*)
-            install_script="${CSIT_DIR}/resources/tools/scripts/"
-            install_script+="download_install_vpp_pkgs.sh"
-            # 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
-                echo "Downloading latest VPP packages from NEXUS..."
-                # TODO: Can we source?
-                bash "${install_script}" --skip-install || {
-                    die "Failed to get VPP packages!"
-                }
+                warn "Downloading latest VPP packages from Packagecloud."
             else
-                echo "Downloading VPP packages of specific version from NEXUS."
-                dpdk_stable_ver="$(cat "${CSIT_DIR}/DPDK_STABLE_VER")" || {
-                    die "Cat failed."
-                }
-                vpp_stable_ver="$(cat "${CSIT_DIR}/VPP_STABLE_VER_UBUNTU")" || {
-                    die "Cat failed."
-                }
-                install_args=("--skip-install" "--vpp" "${vpp_stable_ver}")
-                install_args+=("--dkms" "${dpdk_stable_ver}")
-                bash "${install_script}" "${install_args[@]}" || {
-                    die "Failed to get VPP packages!"
+                warn "Downloading stable VPP packages from Packagecloud."
+                VPP_VERSION="$(<"${CSIT_DIR}/${VPP_VER_FILE}")" || {
+                    die "Read VPP stable version failed."
                 }
             fi
+            source "${BASH_FUNCTION_DIR}/artifacts.sh" || die "Source failed."
+            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."
             }
             ;;