X-Git-Url: https://gerrit.fd.io/r/gitweb?p=csit.git;a=blobdiff_plain;f=resources%2Flibraries%2Fbash%2Ffunction%2Fansible.sh;h=64508bda111d1646626b9dde467b1a8bb887da93;hp=663861e8d8cd0f21a58c66f064d65e452df4ed04;hb=6da5a6920171682bd5bf6a77517bedfef91cbd0e;hpb=459f6b0055c5db6fc2fec39b96fdec592f92ccba diff --git a/resources/libraries/bash/function/ansible.sh b/resources/libraries/bash/function/ansible.sh index 663861e8d8..64508bda11 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) 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: @@ -16,50 +16,100 @@ set -exuo pipefail -function ansible_hosts () { - # Run ansible playbook on hosts in working topology file. Ansible scope is - # determined by tags passed as parameters to this function. +function ansible_adhoc () { + + # Run ansible ad-hoc command module on hosts in working topology file. # # Variable read: # - ${WORKING_TOPOLOGY} - Reserved working topology. - # - ${TOOLS_DIR} - CSIT tools directory, where testbed-setup is located. + # - ${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 - sudo apt-get update -y || die "apt-get update failed!" - sudo apt-get install -y sshpass || die "Install sshpass failed!" + 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 "${CSIT_DIR}"/fdio.infra.ansible || die "Pushd failed!" + export ANSIBLE_HOST_KEY_CHECKING=False + export ANSIBLE_STDOUT_CALLBACK=yaml + export ANSIBLE_PIPELINING=true + ansible-playbook \ + --vault-password-file=vault_pass \ + --extra-vars '@vault.yml' \ + --inventory inventories/$INVENTORY_PATH/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. + # - ${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 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-playbook \ + pushd "${CSIT_DIR}"/fdio.infra.ansible || die "Pushd failed!" + export ANSIBLE_HOST_KEY_CHECKING=False + export ANSIBLE_STDOUT_CALLBACK=yaml + export ANSIBLE_PIPELINING=true + 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!" } -function installed () { - set -exuo pipefail +function installed () { # Check if the given utility is installed. Fail if not installed. # # Arguments: # - ${1} - Utility to check. - # Returns: + # Returns (implicitly): # - 0 - If command is installed. # - 1 - If command is not installed. + set -exuo pipefail + command -v "${1}" -} \ No newline at end of file +}