From 51a8ed8e95a2240547b0128701cc8acf6ba8bbcc Mon Sep 17 00:00:00 2001 From: Ian Wienand Date: Tue, 22 Sep 2020 15:48:29 +1000 Subject: [PATCH] Refactor fetch-sphinx-tarball to be executor safe This reverts commit 69a238df46ca81e8890ebb2ace7addcbb4852911. The role is re-written with executor-safe methods. Depends-On: https://review.opendev.org/753222 Change-Id: I0b52eff66bfdca776e0e5c426bf1fc57deb3fc49 --- doc/source/general-roles.rst | 1 + roles/clean-directory/README.rst | 10 ++++ roles/clean-directory/tasks/main.yaml | 28 +++++++++++ roles/merge-output-to-logs/tasks/main.yaml | 57 ++++++++++++++++------ zuul-tests.d/python-jobs.yaml | 28 ++++++----- 5 files changed, 96 insertions(+), 28 deletions(-) create mode 100644 roles/clean-directory/README.rst create mode 100644 roles/clean-directory/tasks/main.yaml diff --git a/doc/source/general-roles.rst b/doc/source/general-roles.rst index b856c517d..ee9ec584e 100644 --- a/doc/source/general-roles.rst +++ b/doc/source/general-roles.rst @@ -7,6 +7,7 @@ General Purpose Roles .. zuul:autorole:: add-sshkey .. zuul:autorole:: bindep .. zuul:autorole:: buildset-artifacts-location +.. zuul:autorole:: clean-directory .. zuul:autorole:: clear-firewall .. zuul:autorole:: configure-mirrors .. zuul:autorole:: copy-build-sshkey diff --git a/roles/clean-directory/README.rst b/roles/clean-directory/README.rst new file mode 100644 index 000000000..0657ffa7f --- /dev/null +++ b/roles/clean-directory/README.rst @@ -0,0 +1,10 @@ +Clean a directory, but leave the directory alone + +This is the equivalent of ``rm -rf *`` when run in a directory. It is +safe to run in executor context. + +**Role Variables** + +.. zuul:rolevar:: clean_directory_path + + The directory to clean. diff --git a/roles/clean-directory/tasks/main.yaml b/roles/clean-directory/tasks/main.yaml new file mode 100644 index 000000000..737bc0f2c --- /dev/null +++ b/roles/clean-directory/tasks/main.yaml @@ -0,0 +1,28 @@ +- name: Assert directory set + assert: + that: clean_directory_path is defined + fail_msg: 'Must specify clean_directory_path' + +- block: + - name: Collect files + find: + paths: '{{ clean_directory_path }}' + hidden: True + recurse: True + register: _files + + - name: Collect directories + find: + paths: '{{ clean_directory_path }}' + hidden: True + recurse: True + file_type: directory + register: _dirs + + - name: Clean Directory + file: + path: '{{ zj_item }}' + state: absent + loop: '{{ _files.files + _dirs.files }}' + loop_control: + loop_var: zj_item diff --git a/roles/merge-output-to-logs/tasks/main.yaml b/roles/merge-output-to-logs/tasks/main.yaml index b9e0ad037..1841613ea 100644 --- a/roles/merge-output-to-logs/tasks/main.yaml +++ b/roles/merge-output-to-logs/tasks/main.yaml @@ -1,18 +1,45 @@ - name: Move artifacts and docs to logs dir when: zuul.change is defined delegate_to: localhost - shell: | - if [ -n "$(find {{ zuul.executor.work_root }}/{{ zj_item }} -mindepth 1)" ] ; then - # Only create target directory if it is needed. - # Do not fail if it is already there. - mkdir -p {{ zuul.executor.log_root }}/{{ zj_item }} - # Leave the original directory behind so that other roles - # operating on the interface directories can simply no-op. - mv -f {{ zuul.executor.work_root }}/{{ zj_item }}/* {{ zuul.executor.log_root }}/{{ zj_item }} - fi - loop: - - artifacts - - docs - loop_control: - loop_var: zj_item - run_once: true + block: + # Artifacts + - name: Check if artifacts is empty + find: + paths: '{{ zuul.executor.work_root }}/artifacts' + register: _artifacts + + - name: Copy artifacts into log root + synchronize: + src: '{{ zuul.executor.work_root }}/artifacts/' + dest: '{{ zuul.exector.log_root }}/artifacts/' + owner: no + group: no + when: _artifacts.files + + - name: Clean artifacts + include_role: + name: clean-directory + vars: + clean_directory_path: '{{ zuul.executor.work_root }}/artifacts/' + when: _artifacts.files + + # Docs + - name: Check if docs is empty + find: + paths: '{{ zuul.executor.work_root }}/docs' + register: _docs + + - name: Copy docs into log root + synchronize: + src: '{{ zuul.executor.work_root }}/docs/' + dest: '{{ zuul.exector.log_root }}/docs/' + owner: no + group: no + when: _docs.files + + - name: Clean docs + include_role: + name: clean-directory + vars: + clean_directory_path: '{{ zuul.executor.work_root }}/docs/' + when: _docs.files diff --git a/zuul-tests.d/python-jobs.yaml b/zuul-tests.d/python-jobs.yaml index 83a55f3bb..de36aaca5 100644 --- a/zuul-tests.d/python-jobs.yaml +++ b/zuul-tests.d/python-jobs.yaml @@ -425,19 +425,19 @@ vars: zuul_use_fetch_output: false -# Disabled because "Move artifacts and docs to logs dir" task would -# fail with "Executing local code is prohibited" during testing -# - job: -# name: zuul-jobs-test-fetch-sphinx-tarball-with-zuul-output -# description: Test the fetch-sphinx-tarball -# files: -# - roles/ensure-output-dirs/.* -# - roles/fetch-sphinx-tarball/.* -# - roles/fetch-output/.* -# run: test-playbooks/python/fetch-sphinx-tarball.yaml -# voting: false -# vars: -# zuul_use_fetch_output: true +- job: + name: zuul-jobs-test-fetch-sphinx-tarball-with-zuul-output + description: Test the fetch-sphinx-tarball + files: + - roles/ensure-output-dirs/.* + - roles/fetch-sphinx-tarball/.* + - roles/fetch-output/.* + - roles/merge-output-to-logs/.* + - roles/clean-directory/.* + - test-playbooks/python/fetch-sphinx-tarball.yaml + run: test-playbooks/python/fetch-sphinx-tarball.yaml + vars: + zuul_use_fetch_output: true - job: name: zuul-jobs-test-fetch-sphinx-tarball-synchronize @@ -489,6 +489,7 @@ - zuul-jobs-test-fetch-subunit-output-synchronize - zuul-jobs-test-fetch-sphinx-output - zuul-jobs-test-fetch-sphinx-output-synchronize + - zuul-jobs-test-fetch-sphinx-tarball-with-zuul-output - zuul-jobs-test-fetch-sphinx-tarball-synchronize gate: jobs: @@ -527,4 +528,5 @@ - zuul-jobs-test-fetch-subunit-output-synchronize - zuul-jobs-test-fetch-sphinx-output - zuul-jobs-test-fetch-sphinx-output-synchronize + - zuul-jobs-test-fetch-sphinx-tarball-with-zuul-output - zuul-jobs-test-fetch-sphinx-tarball-synchronize