From 2b537c09d4f9819ce62d9a2b7c6d27850358050c Mon Sep 17 00:00:00 2001 From: pmikus Date: Wed, 7 Jul 2021 06:02:57 +0000 Subject: Infra: AWS Jenkins Integration Signed-off-by: pmikus Change-Id: I5910ce0701f865403aa772c7ad5d8eb126c6ec2c --- .../libraries/bash/entry/bootstrap_verify_perf.sh | 4 +- resources/libraries/bash/function/common.sh | 68 ++++++++------ resources/libraries/bash/function/terraform.sh | 103 +++++++++++++++++++++ 3 files changed, 144 insertions(+), 31 deletions(-) mode change 100644 => 100755 resources/libraries/bash/entry/bootstrap_verify_perf.sh create mode 100644 resources/libraries/bash/function/terraform.sh (limited to 'resources/libraries') diff --git a/resources/libraries/bash/entry/bootstrap_verify_perf.sh b/resources/libraries/bash/entry/bootstrap_verify_perf.sh old mode 100644 new mode 100755 index 9c91017303..99813573ea --- a/resources/libraries/bash/entry/bootstrap_verify_perf.sh +++ b/resources/libraries/bash/entry/bootstrap_verify_perf.sh @@ -32,17 +32,19 @@ source "${BASH_FUNCTION_DIR}/common.sh" || { } source "${BASH_FUNCTION_DIR}/gather.sh" || die "Source failed." source "${BASH_FUNCTION_DIR}/ansible.sh" || die "Source failed." +source "${BASH_FUNCTION_DIR}/terraform.sh" || die "Source failed." common_dirs || die check_prerequisites || die get_test_code "${1-}" || die get_test_tag_string || die -select_topology || die select_arch_os || die gather_build || die check_download_dir || die activate_virtualenv || die generate_tests || die archive_tests || die +prepare_topology || die +select_topology || die reserve_and_cleanup_testbed || die select_tags || die compose_pybot_arguments || die diff --git a/resources/libraries/bash/function/common.sh b/resources/libraries/bash/function/common.sh index ed3b2044d3..821f8ca072 100644 --- a/resources/libraries/bash/function/common.sh +++ b/resources/libraries/bash/function/common.sh @@ -481,11 +481,6 @@ function get_test_code () { NODENESS="3n" FLAVOR="tsh" ;; - *) - # Fallback to 3-node Haswell by default (backward compatibility) - NODENESS="3n" - FLAVOR="hsw" - ;; esac } @@ -539,9 +534,6 @@ function get_test_tag_string () { elif [[ "${test_tag_array[0]}" == "skx" ]]; then export GRAPH_NODE_VARIANT="skx" TEST_TAG_STRING="${test_tag_array[@]:1}" || true - elif [[ "${test_tag_array[0]}" == "hsw" ]]; then - export GRAPH_NODE_VARIANT="hsw" - TEST_TAG_STRING="${test_tag_array[@]:1}" || true fi fi fi @@ -607,6 +599,34 @@ function move_archives () { } +function prepare_topology () { + + # Prepare virtual testbed topology if needed based on flavor. + + # Variables read: + # - NODENESS - Node multiplicity of testbed, either "2n" or "3n". + # - FLAVOR - Node flavor string, e.g. "clx" or "skx". + # Functions called: + # - die - Print to stderr and exit. + # - terraform_init - Terraform init topology. + # - terraform_apply - Terraform apply topology. + + set -exuo pipefail + + case_text="${NODENESS}_${FLAVOR}" + case "${case_text}" in + "2n_aws") + terraform_init || die "Failed to call terraform init." + terraform_apply || die "Failed to call terraform apply." + ;; + "3n_aws") + terraform_init || die "Failed to call terraform init." + terraform_apply || die "Failed to call terraform apply." + ;; + esac +} + + function reserve_and_cleanup_testbed () { # Reserve physical testbed, perform cleanup, register trap to unreserve. @@ -809,7 +829,7 @@ function select_tags () { *"3n-skx"* | *"2n-skx"* | *"2n-clx"* | *"2n-zn2"*) default_nic="nic_intel-xxv710" ;; - *"3n-hsw"* | *"2n-tx2"* | *"mrr-daily-master") + *"2n-tx2"* | *"mrr-daily-master") default_nic="nic_intel-xl710" ;; *"2n-aws"* | *"3n-aws"*) @@ -897,7 +917,6 @@ function select_tags () { # # Reasons for blacklisting: # - ipsechw - Blacklisted on testbeds without crypto hardware accelerator. - # TODO: Add missing reasons here (if general) or where used (if specific). case "${TEST_CODE}" in *"2n-skx"*) test_tag_array+=("!ipsechw") @@ -936,21 +955,9 @@ function select_tags () { test_tag_array+=("!drv_avf") test_tag_array+=("!ipsechw") ;; - *"3n-hsw"*) - test_tag_array+=("!drv_avf") - # All cards have access to QAT. But only one card (xl710) - # resides in same NUMA as QAT. Other cards must go over QPI - # which we do not want to even run. - test_tag_array+=("!ipsechwNOTnic_intel-xl710") - ;; *"2n-aws"* | *"3n-aws"*) test_tag_array+=("!ipsechw") ;; - *) - # Default to 3n-hsw due to compatibility. - test_tag_array+=("!drv_avf") - test_tag_array+=("!ipsechwNOTnic_intel-xl710") - ;; esac # We will add excluded NICs. @@ -1000,7 +1007,7 @@ function select_topology () { # Variables read: # - NODENESS - Node multiplicity of testbed, either "2n" or "3n". - # - FLAVOR - Node flavor string, currently either "hsw" or "skx". + # - FLAVOR - Node flavor string, e.g. "clx" or "skx". # - CSIT_DIR - Path to existing root of local CSIT git repository. # - TOPOLOGIES_DIR - Path to existing directory with available topologies. # Variables set: @@ -1013,8 +1020,6 @@ function select_topology () { case_text="${NODENESS}_${FLAVOR}" case "${case_text}" in - # TODO: Move tags to "# Blacklisting certain tags per topology" section. - # TODO: Double link availability depends on NIC used. "1n_vbox") TOPOLOGIES=( "${TOPOLOGIES_DIR}"/*vpp_device*.template ) TOPOLOGIES_TAGS="2_node_single_link_topo" @@ -1047,10 +1052,6 @@ function select_topology () { TOPOLOGIES=( "${TOPOLOGIES_DIR}"/*3n_dnv*.yaml ) TOPOLOGIES_TAGS="3_node_single_link_topo" ;; - "3n_hsw") - TOPOLOGIES=( "${TOPOLOGIES_DIR}"/*3n_hsw*.yaml ) - TOPOLOGIES_TAGS="3_node_single_link_topo" - ;; "3n_tsh") TOPOLOGIES=( "${TOPOLOGIES_DIR}"/*3n_tsh*.yaml ) TOPOLOGIES_TAGS="3_node_single_link_topo" @@ -1068,7 +1069,7 @@ function select_topology () { TOPOLOGIES_TAGS="3_node_single_link_topo" ;; *) - # No falling back to 3n_hsw default, that should have been done + # No falling back to default, that should have been done # by the function which has set NODENESS and FLAVOR. die "Unknown specification: ${case_text}" esac @@ -1198,6 +1199,13 @@ function untrap_and_unreserve_testbed () { python3 "${PYTHON_SCRIPTS_DIR}/topo_reservation.py" -c -t "${wt}" || { die "${1:-FAILED TO UNRESERVE, FIX MANUALLY.}" 2 } + case "${TEST_CODE}" in + *"2n-aws"* | *"3n-aws"*) + terraform_destroy || die "Failed to call terraform destroy." + ;; + *) + ;; + esac WORKING_TOPOLOGY="" set -eu fi diff --git a/resources/libraries/bash/function/terraform.sh b/resources/libraries/bash/function/terraform.sh new file mode 100644 index 0000000000..209227a024 --- /dev/null +++ b/resources/libraries/bash/function/terraform.sh @@ -0,0 +1,103 @@ +#!/usr/bin/env bash + +# Copyright (c) 2021 Cisco 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: +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +set -exuo pipefail + + +function terraform_apply () { + + # Run terraform apply command to prepare topology. + # + # Variable read: + # - ${CSIT_DIR} - CSIT main directory, where terraform modules are located. + # - ${NODENESS} - Node multiplicity of desired testbed. + # - ${FLAVOR} - Node flavor string, see common.sh + + set -exuo pipefail + + if ! installed terraform; then + die "Please install terraform!" + fi + + pushd "${CSIT_DIR}"/fdio.infra.terraform || die "Pushd failed!" + pushd "${NODENESS}_${FLAVOR}_c5n" || die "Pushd failed!" + export TF_LOG=INFO + terraform apply -auto-approve || die "Failed to run terraform apply!" + popd || die "Popd failed!" + popd || die "Popd failed!" +} + +function terraform_destroy () { + + # Run terraform destroy command to prepare module. + # + # Variable read: + # - ${CSIT_DIR} - CSIT main directory, where terraform modules are located. + # - ${NODENESS} - Node multiplicity of desired testbed. + # - ${FLAVOR} - Node flavor string, see common.sh + + set -exuo pipefail + + if ! installed terraform; then + die "Please install terraform!" + fi + + pushd "${CSIT_DIR}"/fdio.infra.terraform || die "Pushd failed!" + pushd "${NODENESS}_${FLAVOR}_c5n" || die "Pushd failed!" + export TF_LOG=INFO + terraform destroy -auto-approve || die "Failed to run terraform destroy!" + popd || die "Popd failed!" + popd || die "Popd failed!" +} + + +function terraform_init () { + + # Run terraform init command to prepare module. + # + # Variable read: + # - ${CSIT_DIR} - CSIT main directory, where terraform modules are located. + # - ${NODENESS} - Node multiplicity of desired testbed. + # - ${FLAVOR} - Node flavor string, see common.sh + + set -exuo pipefail + + if ! installed terraform; then + die "Please install terraform!" + fi + + pushd "${CSIT_DIR}"/fdio.infra.terraform || die "Pushd failed!" + pushd "${NODENESS}_${FLAVOR}_c5n" || die "Pushd failed!" + export TF_LOG=INFO + terraform init || die "Failed to run terraform init!" + popd || die "Popd failed!" + popd || die "Popd failed!" +} + + +function installed () { + + # Check if the given utility is installed. Fail if not installed. + # + # Arguments: + # - ${1} - Utility to check. + # Returns (implicitly): + # - 0 - If command is installed. + # - 1 - If command is not installed. + + set -exuo pipefail + + command -v "${1}" +} -- cgit 1.2.3-korg