From 0c8bd97330dcad295ebbaaa4664ce6db355d99dd Mon Sep 17 00:00:00 2001 From: Kevin Carter Date: Thu, 22 Sep 2016 20:46:19 -0500 Subject: [PATCH] Update run-playbooks to support playbook logic This change allows the run playbooks script to run with playbook logic within the top level setup-* files. Previously run-playbooks would ignore extra login found within the setup files and only execute the "include" item. This change generates specific temp playbooks based on the include lines and pulls in any and all options that may have been provided. This also improves playbook specific execution logging allowing us to know what was executed and in what order. Change-Id: I5810610cedd5c27f4b6e051f97387102dc4b4f05 Signed-off-by: Kevin Carter --- .gitignore | 5 +++- scripts/run-playbooks.sh | 58 +++++++++++++++++++++++++++++++++++----- 2 files changed, 55 insertions(+), 8 deletions(-) diff --git a/.gitignore b/.gitignore index 8be7acb55f..de93c4eac7 100644 --- a/.gitignore +++ b/.gitignore @@ -63,4 +63,7 @@ releasenotes/build # Vagrant artifacts .vagrant - +# run playbooks tests +playbooks/root-include-playbook.yml +playbooks/include-playbook.yml* +playbooks/logs diff --git a/scripts/run-playbooks.sh b/scripts/run-playbooks.sh index 8130b182c7..d600b544c9 100755 --- a/scripts/run-playbooks.sh +++ b/scripts/run-playbooks.sh @@ -18,7 +18,9 @@ set -e -u ## Variables ----------------------------------------------------------------- DEPLOY_AIO=${DEPLOY_AIO:-false} +PLAYBOOK_LOGS=${PLAYBOOK_LOGS:-"/openstack/log/ansible_playbooks/"} COMMAND_LOGS=${COMMAND_LOGS:-"/openstack/log/ansible_cmd_logs/"} +ORIG_ANSIBLE_LOG_PATH=${ANSIBLE_LOG_PATH:-"/openstack/log/ansible-logging/ansible.log"} ## Main ---------------------------------------------------------------------- function run_play_book_exit_message { @@ -44,6 +46,26 @@ If you ever have any questions please join the community conversation on IRC at " } +function get_includes { + /opt/ansible-runtime/bin/python < root-include-playbook.yml + root_include_file_name="$(get_include_file root-include-playbook.yml)" + # Once setup-hosts is complete, we should gather facts for everything # (now including containers) so that the fact cache is complete for the # remainder of the run. - if [[ "${root_include}" == "setup-infrastructure.yml" ]]; then + if [[ "${root_include_file_name}" == "setup-infrastructure.yml" ]]; then ansible -m setup -a "gather_subset=network,hardware,virtual" all fi - for include in $(awk -F'include:' '{print $2}' "${root_include}"); do - echo "[Executing \"${include}\" playbook]" - if [[ "${DEPLOY_AIO}" = true ]] && [[ "${include}" == "security-hardening.yml" ]]; then + for include in $(get_includes "${root_include_file_name}"); do + echo -e "${include}" > /tmp/include-playbook.yml + include_file_name="$(get_include_file /tmp/include-playbook.yml)" + include_playbook="include-playbook.yml-${include_file_name}" + mv /tmp/include-playbook.yml ${include_playbook} + echo "[Executing \"${include_file_name}\" playbook]" + # Set the playbook log path so that we can review specific execution later. + export ANSIBLE_LOG_PATH="${PLAYBOOK_LOGS}/${COUNTER}-${include_file_name}.txt" + let COUNTER=COUNTER+=1 + if [[ "${DEPLOY_AIO}" = true ]] && [[ "${include_file_name}" == "security-hardening.yml" ]]; then # NOTE(mattt): We have to skip V-38462 as openstack-infra are now building # images with apt config Apt::Get::AllowUnauthenticated set # to true. @@ -69,12 +104,17 @@ function playbook_run { # in OpenStack-CI. ref: bug/1620849 # NOTE(mhayden): Skipping V-38660 since it breaks the Xenial gate. The # CI Xenial image has non-SNMPv3 configurations. - install_bits "${include}" --skip-tag V-38462,V-38471,V-38660 + install_bits "${include_playbook}" --skip-tag V-38462,V-38471,V-38660 else - install_bits "${include}" + install_bits "${include_playbook}" fi + # Remove the generate playbook when done with it + rm "${include_playbook}" done + # Remove the generate playbook when done with it + rm root-include-playbook.yml done + cat ${PLAYBOOK_LOGS}/* >> "${ORIG_ANSIBLE_LOG_PATH}" } trap run_play_book_exit_message EXIT @@ -85,6 +125,10 @@ info_block "Checking for required libraries." 2> /dev/null || source "$(dirname pushd "playbooks" PLAYBOOK_DIR="$(pwd)" + # Create playbook log directory + mkdir -p "${PLAYBOOK_LOGS}" + mkdir -p "$(dirname ${ORIG_ANSIBLE_LOG_PATH})" + # Execute setup everything playbook_run