From 2cf0755933dac3e95c10928347996bad3cbe0a42 Mon Sep 17 00:00:00 2001 From: Peter Mikus Date: Fri, 24 Jan 2020 14:56:57 +0000 Subject: Ansible: Cleanup and speedup Signed-off-by: Peter Mikus Change-Id: Ia2ce482798204ad426f93f334c97e28eb51139fd --- resources/libraries/bash/function/ansible.sh | 38 +++++++++++++++++++++++----- resources/libraries/bash/function/common.sh | 10 ++++---- 2 files changed, 36 insertions(+), 12 deletions(-) (limited to 'resources/libraries/bash/function') diff --git a/resources/libraries/bash/function/ansible.sh b/resources/libraries/bash/function/ansible.sh index 431acc7c5d..56665dfa1c 100644 --- a/resources/libraries/bash/function/ansible.sh +++ b/resources/libraries/bash/function/ansible.sh @@ -1,6 +1,6 @@ #!/usr/bin/env bash -# Copyright (c) 2019 Cisco and/or its affiliates. +# Copyright (c) 2020 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: @@ -16,10 +16,9 @@ set -exuo pipefail -function ansible_hosts () { +function ansible_adhoc () { - # Run ansible playbook on hosts in working topology file. Ansible scope is - # determined by tags passed as parameters to this function. + # Run ansible ad-hoc command module on hosts in working topology file. # # Variable read: # - ${WORKING_TOPOLOGY} - Reserved working topology. @@ -31,9 +30,33 @@ function ansible_hosts () { die "Please install sshpass!" fi - if ! installed ansible-playbook; then - # TODO: Consider moving to requirements.txt? - pip install ansible==2.7.8 || die "Install ansible via PIP failed!" + hosts=($(fgrep host "${WORKING_TOPOLOGY}" | cut -d ":" -f 2)) || { + die "Failed to read hosts from working topology!" + } + pushd "${TOOLS_DIR}"/testbed-setup/ansible || die "Pushd failed!" + ANSIBLE_STDOUT_CALLBACK=yaml ansible \ + --vault-password-file=vault_pass \ + --extra-vars '@vault.yml' \ + --inventory inventories/lf_inventory/hosts site.yaml \ + --limit "$(echo ${hosts[@]//\"})" \ + --module-name shell \ + --args \"$(echo $@)\" || die "Failed to run ansible on host!" + popd || die "Popd failed!" +} + +function ansible_playbook () { + + # Run ansible playbook on hosts in working topology file. Ansible scope is + # determined by tags passed as parameters to this function. + # + # Variable read: + # - ${WORKING_TOPOLOGY} - Reserved working topology. + # - ${TOOLS_DIR} - CSIT tools directory, where testbed-setup is located. + + set -exuo pipefail + + if ! installed sshpass; then + die "Please install sshpass!" fi hosts=($(fgrep host "${WORKING_TOPOLOGY}" | cut -d ":" -f 2)) || { @@ -49,6 +72,7 @@ function ansible_hosts () { popd || die "Popd failed!" } + function installed () { # Check if the given utility is installed. Fail if not installed. diff --git a/resources/libraries/bash/function/common.sh b/resources/libraries/bash/function/common.sh index 38ba60116a..f89f71dc65 100644 --- a/resources/libraries/bash/function/common.sh +++ b/resources/libraries/bash/function/common.sh @@ -561,7 +561,7 @@ function reserve_and_cleanup_testbed () { # - WORKING_TOPOLOGY - Path to topology yaml file of the reserved testbed. # Functions called: # - die - Print to stderr and exit. - # - ansible_hosts - Perform an action using ansible, see ansible.sh + # - ansible_playbook - Perform an action using ansible, see ansible.sh # Traps registered: # - EXIT - Calls cancel_all for ${WORKING_TOPOLOGY}. @@ -588,9 +588,9 @@ function reserve_and_cleanup_testbed () { } die "Trap attempt failed, unreserve succeeded. Aborting." } - # Cleanup check. + # Cleanup + calibration checks. set +e - ansible_hosts "cleanup" + ansible_playbook "cleanup, calibration" result="$?" set -e if [[ "${result}" == "0" ]]; then @@ -1033,7 +1033,7 @@ function untrap_and_unreserve_testbed () { # - EXIT - Failure to untrap is reported, but ignored otherwise. # Functions called: # - die - Print to stderr and exit. - # - ansible_hosts - Perform an action using ansible, see ansible.sh + # - ansible_playbook - Perform an action using ansible, see ansible.sh set -xo pipefail set +eu # We do not want to exit early in a "teardown" function. @@ -1043,7 +1043,7 @@ function untrap_and_unreserve_testbed () { set -eu warn "Testbed looks unreserved already. Trap removal failed before?" else - ansible_hosts "cleanup" || true + ansible_playbook "cleanup" || true python3 "${PYTHON_SCRIPTS_DIR}/topo_reservation.py" -c -t "${wt}" || { die "${1:-FAILED TO UNRESERVE, FIX MANUALLY.}" 2 } -- cgit 1.2.3-korg