+# TOPOLOGY SELECTION
+case "$TEST_CODE" in
+ *2n-skx*)
+ TOPOLOGIES=$TOPOLOGIES_2N_SKX
+ TOPOLOGIES_TAGS="2_node_*_link_topo"
+ ;;
+ *3n-skx*)
+ TOPOLOGIES=$TOPOLOGIES_3N_SKX
+ TOPOLOGIES_TAGS="3_node_*_link_topo"
+ ;;
+ *)
+ # Fallback to 3-node Haswell by default (backward compatibility)
+ TOPOLOGIES=$TOPOLOGIES_3N_HSW
+ TOPOLOGIES_TAGS="3_node_*_link_topo"
+ ;;
+esac
+
+if [[ -z "${TOPOLOGIES}" ]]; then
+ die 1 "No applicable topology found!"
+fi
+
+cd ${DOWNLOAD_DIR}
+case "$TEST_CODE" in
+ *hc2vpp*)
+ DUT="hc2vpp"
+ ;;
+ *vpp*)
+ DUT="vpp"
+
+ case "$TEST_CODE" in
+ csit-vpp-*)
+ # Use downloaded packages with specific version
+ if [[ "$TEST_CODE" == *daily* ]] || \
+ [[ "$TEST_CODE" == *weekly* ]] || \
+ [[ "$TEST_CODE" == *timed* ]];
+ then
+ echo Downloading latest VPP packages from NEXUS...
+ bash ${SCRIPT_DIR}/resources/tools/scripts/download_install_vpp_pkgs.sh \
+ --skip-install || {
+ die 1 "Failed to get VPP packages!"
+ }
+ else
+ echo Downloading VPP packages of specific version from NEXUS...
+ DPDK_STABLE_VER=$(cat ${SCRIPT_DIR}/DPDK_STABLE_VER)
+ VPP_STABLE_VER=$(cat ${SCRIPT_DIR}/VPP_STABLE_VER_UBUNTU)
+ bash ${SCRIPT_DIR}/resources/tools/scripts/download_install_vpp_pkgs.sh \
+ --skip-install --vpp ${VPP_STABLE_VER} --dkms ${DPDK_STABLE_VER} || {
+ die 1 "Failed to get VPP packages!"
+ }
+ fi
+ ;;
+ vpp-csit-*)
+ # Use local built packages.
+ mv ../${DUT}*.deb ${DOWNLOAD_DIR}/
+ ;;
+ *)
+ die 1 "Unable to identify job type from: ${TEST_CODE}!"
+ ;;
+ esac
+ ;;
+ *ligato*)
+ DUT="kubernetes"
+
+ case "$TEST_CODE" in
+ csit-*)
+ # Use downloaded packages with specific version
+ if [[ "$TEST_CODE" == *daily* ]] || \
+ [[ "$TEST_CODE" == *weekly* ]] || \
+ [[ "$TEST_CODE" == *timed* ]];
+ then
+ echo Downloading latest VPP packages from NEXUS...
+ bash ${SCRIPT_DIR}/resources/tools/scripts/download_install_vpp_pkgs.sh \
+ --skip-install || {
+ die 1 "Failed to get VPP packages!"
+ }
+ else
+ echo Downloading VPP packages of specific version from NEXUS...
+ DPDK_STABLE_VER=$(cat ${SCRIPT_DIR}/DPDK_STABLE_VER)
+ VPP_STABLE_VER=$(cat ${SCRIPT_DIR}/VPP_STABLE_VER_UBUNTU)
+ bash ${SCRIPT_DIR}/resources/tools/scripts/download_install_vpp_pkgs.sh \
+ --skip-install --vpp ${VPP_STABLE_VER} --dkms ${DPDK_STABLE_VER} || {
+ die 1 "Failed to get VPP packages!"
+ }
+ fi
+ ;;
+ vpp-csit-*)
+ # Use local builded packages.
+ mv ../${DUT}*.deb ${DOWNLOAD_DIR}/
+ ;;
+ *)
+ die 1 "Unable to identify job type from: ${TEST_CODE}!"
+ ;;
+ esac
+ # Extract VPP API to specific folder
+ dpkg -x ${DOWNLOAD_DIR}/vpp_*.deb /tmp/vpp || {
+ die 1 "Failed to extract ${DUT} package!"
+ }
+
+ LIGATO_REPO_URL="https://github.com/ligato/"
+ VPP_AGENT_STABLE_VER=$(cat ${SCRIPT_DIR}/VPP_AGENT_STABLE_VER)
+ DOCKER_DEB="docker-ce_18.03.0~ce-0~ubuntu_amd64.deb"
+
+ # Clone & checkout stable vnf-agent
+ cd ../..
+ git clone -b ${VPP_AGENT_STABLE_VER} --single-branch \
+ ${LIGATO_REPO_URL}/vpp-agent vpp-agent || {
+ die 1 "Failed to run: git clone ${LIGATO_REPO_URL}/vpp-agent!"
+ }
+ cd vpp-agent
+
+ # Install Docker
+ wget -q https://download.docker.com/linux/ubuntu/dists/xenial/pool/stable/amd64/${DOCKER_DEB} || {
+ die 1 "Failed to download Docker package!"
+ }
+
+ sudo dpkg -i ${DOCKER_DEB} || {
+ die 1 "Failed to install Docker!"
+ }
+
+ # Pull ligato/dev_vpp_agent docker image and re-tag as local
+ sudo docker pull ligato/dev-vpp-agent:${VPP_AGENT_STABLE_VER} || {
+ die 1 "Failed to pull Docker image!"
+ }
+
+ sudo docker tag ligato/dev-vpp-agent:${VPP_AGENT_STABLE_VER}\
+ dev_vpp_agent:latest || {
+ die 1 "Failed to tag Docker image!"
+ }
+
+ # Start dev_vpp_agent container as daemon
+ sudo docker run --rm -itd --name agentcnt dev_vpp_agent bash || {
+ die 1 "Failed to run Docker image!"
+ }
+
+ # Copy latest vpp api into running container
+ sudo docker cp /tmp/vpp/usr/share/vpp/api agentcnt:/usr/share/vpp || {
+ die 1 "Failed to copy files Docker image!"
+ }
+
+ for f in ${DOWNLOAD_DIR}/*; do
+ sudo docker cp $f agentcnt:/opt/vpp-agent/dev/vpp/build-root/ || {
+ die 1 "Failed to copy files Docker image!"
+ }
+ done
+
+ # Recompile vpp-agent
+ sudo docker exec -i agentcnt \
+ script -qec '. ~/.bashrc; cd /go/src/github.com/ligato/vpp-agent && make generate && make install' || {
+ die 1 "Failed to build vpp-agent in Docker image!"
+ }
+ # Save container state
+ sudo docker commit `sudo docker ps -q` dev_vpp_agent:latest || {
+ die 1 "Failed to commit state of Docker image!"
+ }
+
+ # Build prod_vpp_agent docker image
+ cd docker/prod/ &&\
+ sudo docker build --tag prod_vpp_agent --no-cache . || {
+ die 1 "Failed to build Docker image!"
+ }
+ # Export Docker image
+ sudo docker save prod_vpp_agent | gzip > prod_vpp_agent.tar.gz || {
+ die 1 "Failed to save Docker image!"
+ }
+ DOCKER_IMAGE="$( readlink -f prod_vpp_agent.tar.gz | tr '\n' ' ' )"
+ rm -r ${DOWNLOAD_DIR}/vpp*
+ mv ${DOCKER_IMAGE} ${DOWNLOAD_DIR}/
+ ;;
+ *dpdk*)
+ DUT="dpdk"
+
+ DPDK_REPO='https://fast.dpdk.org/rel/'
+ # Use downloaded packages with specific version
+ if [[ "$TEST_CODE" == *daily* ]] || \
+ [[ "$TEST_CODE" == *weekly* ]] || \
+ [[ "$TEST_CODE" == *timed* ]];
+ then
+ echo "Downloading latest DPDK packages from repo..."
+ DPDK_STABLE_VER=$(wget --no-check-certificate --quiet -O - ${DPDK_REPO} | \
+ grep -v '2015' | grep -Eo 'dpdk-[^\"]+xz' | tail -1)
+ else
+ echo "Downloading DPDK packages of specific version from repo..."
+ DPDK_STABLE_VER='dpdk-18.05.tar.xz'
+ fi
+ if [[ ! -f ${DPDK_STABLE_VER} ]]; then
+ wget --no-check-certificate ${DPDK_REPO}${DPDK_STABLE_VER} || {
+ die 1 "Failed to get DPDK package from ${DPDK_REPO}!"
+ }
+ fi
+ ;;
+ *)
+ die 1 "Unable to identify DUT type from: ${TEST_CODE}!"
+ ;;
+esac
+cd ${SCRIPT_DIR}