From 647a693a245ae450756fb3bd9446db856e712812 Mon Sep 17 00:00:00 2001 From: Tomas Alexy Date: Thu, 8 Apr 2021 15:50:24 +0200 Subject: [PATCH] Infra: AWS bootstrap integration Signed-off-by: Tomas Alexy Change-Id: I254c79201a198ee054851c934167a24e9e8803cb --- fdio.infra.ansible/roles/topology/tasks/main.yaml | 18 ++++++++++++++-- .../roles/topology/templates/hosts.j2 | 9 ++++++++ resources/libraries/bash/function/ansible.sh | 24 ++++++++++++++++++++-- resources/libraries/bash/function/common.sh | 24 +++++++++++++++++++++- 4 files changed, 70 insertions(+), 5 deletions(-) create mode 100644 fdio.infra.ansible/roles/topology/templates/hosts.j2 diff --git a/fdio.infra.ansible/roles/topology/tasks/main.yaml b/fdio.infra.ansible/roles/topology/tasks/main.yaml index cf3eb5367f..a70107478e 100644 --- a/fdio.infra.ansible/roles/topology/tasks/main.yaml +++ b/fdio.infra.ansible/roles/topology/tasks/main.yaml @@ -1,9 +1,23 @@ --- # file: roles/topology/tasks/main.yaml -- name: Create topology file +- name: Create Topology File template: src: "templates/topology_{{ cloud_topology }}.j2" - dest: "../../../../topologies/available/{{ cloud_topology }}_{{ testbed_name }}.yaml" + dest: "../topologies/available/{{ cloud_topology }}_{{ testbed_name }}.yaml" tags: - create-topology-file + +- name: Create Inventory Folder + file: + path: "./inventories/cloud_inventory/" + state: directory + tags: + - create-inventory-folder-cloud + +- name: Create Hosts File + template: + src: "templates/hosts.j2" + dest: "./inventories/cloud_inventory/hosts" + tags: + - create-hosts-file-cloud diff --git a/fdio.infra.ansible/roles/topology/templates/hosts.j2 b/fdio.infra.ansible/roles/topology/templates/hosts.j2 new file mode 100644 index 0000000000..12a992dfec --- /dev/null +++ b/fdio.infra.ansible/roles/topology/templates/hosts.j2 @@ -0,0 +1,9 @@ +all: + children: + tg: + hosts: + {{ tg_public_ip }} + sut: + hosts: + {{ dut1_public_ip }} + {{ dut2_public_ip | default() }} diff --git a/resources/libraries/bash/function/ansible.sh b/resources/libraries/bash/function/ansible.sh index 3beca3fba4..64508bda11 100644 --- a/resources/libraries/bash/function/ansible.sh +++ b/resources/libraries/bash/function/ansible.sh @@ -23,9 +23,19 @@ function ansible_adhoc () { # Variable read: # - ${WORKING_TOPOLOGY} - Reserved working topology. # - ${CSIT_DIR} - CSIT main directory, where ansible playbooks are located. + # - ${FLAVOR} - Node flavor string, see common.sh set -exuo pipefail + case "$FLAVOR" in + "aws") + INVENTORY_PATH="cloud_inventory" + ;; + *) + INVENTORY_PATH="lf_inventory" + ;; + esac + if ! installed sshpass; then die "Please install sshpass!" fi @@ -40,7 +50,7 @@ function ansible_adhoc () { ansible-playbook \ --vault-password-file=vault_pass \ --extra-vars '@vault.yml' \ - --inventory inventories/lf_inventory/hosts site.yaml \ + --inventory inventories/$INVENTORY_PATH/hosts site.yaml \ --limit "$(echo ${hosts[@]//\"})" \ --module-name shell \ --args \"$(echo $@)\" || die "Failed to run ansible on host!" @@ -55,9 +65,19 @@ function ansible_playbook () { # Variable read: # - ${WORKING_TOPOLOGY} - Reserved working topology. # - ${CSIT_DIR} - CSIT main directory, where ansible playbooks are located. + # - ${FLAVOR} - Node flavor string, see common.sh set -exuo pipefail + case "$FLAVOR" in + "aws") + INVENTORY_PATH="cloud_inventory" + ;; + *) + INVENTORY_PATH="lf_inventory" + ;; + esac + if ! installed sshpass; then die "Please install sshpass!" fi @@ -72,7 +92,7 @@ function ansible_playbook () { ansible-playbook \ --vault-password-file=vault_pass \ --extra-vars '@vault.yml' \ - --inventory inventories/lf_inventory/hosts site.yaml \ + --inventory inventories/$INVENTORY_PATH/hosts site.yaml \ --limit "$(echo ${hosts[@]//\"})" \ --tags "$(echo $@)" || die "Failed to run ansible on host!" popd || die "Popd failed!" diff --git a/resources/libraries/bash/function/common.sh b/resources/libraries/bash/function/common.sh index a3878015f9..f5f86067ad 100644 --- a/resources/libraries/bash/function/common.sh +++ b/resources/libraries/bash/function/common.sh @@ -441,6 +441,14 @@ function get_test_code () { NODENESS="1n" FLAVOR="tx2" ;; + *"2n-aws"*) + NODENESS="2n" + FLAVOR="aws" + ;; + *"3n-aws"*) + NODENESS="3n" + FLAVOR="aws" + ;; *"2n-skx"*) NODENESS="2n" FLAVOR="skx" @@ -641,7 +649,7 @@ function reserve_and_cleanup_testbed () { } die "Trap attempt failed, unreserve succeeded. Aborting." } - # Cleanup + calibration checks. + # Cleanup + calibration checks set +e ansible_playbook "cleanup, calibration" result="$?" @@ -803,6 +811,9 @@ function select_tags () { *"3n-hsw"* | *"2n-tx2"* | *"mrr-daily-master") default_nic="nic_intel-xl710" ;; + *"2n-aws"* | *"3n-aws"*) + default_nic="nic_amazon-nitro-50g" + ;; *) default_nic="nic_intel-x710" ;; @@ -930,6 +941,9 @@ function select_tags () { # 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") @@ -1043,6 +1057,14 @@ function select_topology () { TOPOLOGIES=( "${TOPOLOGIES_DIR}"/*2n_tx2*.yaml ) TOPOLOGIES_TAGS="2_node_single_link_topo" ;; + "2n_aws") + TOPOLOGIES=( "${TOPOLOGIES_DIR}"/*2n_aws*.yaml ) + TOPOLOGIES_TAGS="2_node_*_link_topo" + ;; + "3n_aws") + TOPOLOGIES=( "${TOPOLOGIES_DIR}"/*3n_aws*.yaml ) + TOPOLOGIES_TAGS="2_node_*_link_topo" + ;; *) # No falling back to 3n_hsw default, that should have been done # by the function which has set NODENESS and FLAVOR. -- 2.16.6