From 18e54ff4c746876f3d4c8c68cda4a216ed090343 Mon Sep 17 00:00:00 2001 From: Jesse Pretorius Date: Fri, 6 Jul 2018 16:19:30 +0100 Subject: [PATCH] proposal/OSA: Sync the contents of the sync folder We have an emerging need to synchronise a common set of tasks across roles. While it may sometimes make sense to create a role for this sort of thing, the overhead of doing so would be greater than simply copying the file between roles. We're also finding include_role to be somewhat buggy, especially when used from inside a role. This patch adds the ability to copy a set of files from the source [1] to the same path (without the 'sync' prefix) in the destination roles, abiding by the same rules as all other synchronised files. [1] openstack/openstack-ansible/tests/sync Relates-to: https://review.openstack.org/579527 Change-Id: I598ff6aae50e6570d5f262c830c4be10f1cc0b75 --- .../sync_openstack_ansible_common_files.sh | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) diff --git a/playbooks/proposal/sync_openstack_ansible_common_files.sh b/playbooks/proposal/sync_openstack_ansible_common_files.sh index 549a0b2102..c51a4809e9 100644 --- a/playbooks/proposal/sync_openstack_ansible_common_files.sh +++ b/playbooks/proposal/sync_openstack_ansible_common_files.sh @@ -20,7 +20,7 @@ set -eu OSA_PROJECT=${1} # Careful of what you put here. -declare -ra files_to_sync=(run_tests.sh bindep.txt Vagrantfile tests/tests-repo-clone.sh .gitignore) +declare -ra files_to_sync=(run_tests.sh bindep.txt Vagrantfile tests/tests-repo-clone.sh .gitignore sync/tasks/*) excluded_projects= exclude_project() { @@ -40,16 +40,23 @@ check_and_ignore() { return 1 } -for x in ${files_to_sync[@]}; do +for src_path in ${files_to_sync[@]}; do # If the source repo does not have the file to copy # then skip to the next file. This covers the situation # where this script runs against old branches which - # do not have the same set of files. - [[ ! -e ${x} ]] && continue + # do not have the same set of files. If the src_path + # is 'sync/tasks/*' because the folder does not exist + # then it will fail this test too. + [[ ! -e ${src_path} ]] && continue + + # For the sync/* files in the array, the destination + # path is different to the source path. To work out + # the destination path we remove the 'sync/' prefix. + dst_path=${src_path#sync/} # If the target repo does not have such a file already # then it's probably best to leave it alone. - [[ ! -e ${OSA_PROJECT}/${x} ]] && continue + [[ ! -e ${OSA_PROJECT}/${dst_path} ]] && continue # Skip the project if it is in the excluded list check_and_ignore ${OSA_PROJECT} && continue @@ -57,7 +64,7 @@ for x in ${files_to_sync[@]}; do # We don't preserve anything from the target repo. # We simply assume that all OSA projects need the same # $files_to_sync - cp ${x} ${OSA_PROJECT}/${x} + cp ${src_path} ${OSA_PROJECT}/${dst_path} done exit 0