From 4da2976e351413df26ae2e190bb92bcef2387fbf Mon Sep 17 00:00:00 2001 From: Adam James Date: Thu, 14 Mar 2024 15:19:31 +0000 Subject: [PATCH] Support local caching of ZooKeeper archives This reduces the load on the Apache archive as well as speeding up tests. --- .github/workflows/ci.yml | 6 ++++ defaults/main.yml | 2 ++ molecule/default/inventory/group_vars/all.yml | 3 ++ tasks/main.yml | 34 +++++++++++++++++-- 4 files changed, 43 insertions(+), 2 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 2ffd8f7..94fd65c 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -80,6 +80,12 @@ jobs: path: ~/.cache/pip key: ${{ runner.os }}-py${{ matrix.python }}-ansible${{ matrix.ansible }}-${{ env.REQS_HASH }} + - name: Cache ZooKeeper archive directory + uses: actions/cache@v4 + with: + path: ~/.cache/ansible/zookeeper + key: zookeeper + - name: Install test dependencies run: pip3 install -r test-requirements.txt diff --git a/defaults/main.yml b/defaults/main.yml index 0f14a23..fd8a6e5 100644 --- a/defaults/main.yml +++ b/defaults/main.yml @@ -4,6 +4,8 @@ zookeeper_download_url: >- https://archive.apache.org/dist/zookeeper/zookeeper-{{ zookeeper_version }}/apache-zookeeper-{{ zookeeper_version }}-bin.tar.gz zookeeper_download_checksum: >- sha512:2b5ae02d618a27ca8cd54924855d5344263b7d9dee760181f9d66bafa9230324d2ad31786895f0654c969dc38d4a3d0077f74cc376b58b5fa2fb94beb1ab445f +# zookeeper_local_download_directory: ~/.cache/ansible/zookeeper +# zookeeper_local_download_directory_mode: "0750" zookeeper_package_dependencies: - gzip diff --git a/molecule/default/inventory/group_vars/all.yml b/molecule/default/inventory/group_vars/all.yml index bcf322a..c03a0f4 100644 --- a/molecule/default/inventory/group_vars/all.yml +++ b/molecule/default/inventory/group_vars/all.yml @@ -1 +1,4 @@ zookeeper_server_inventory_hosts: "{{ groups['zookeeper_servers'] }}" + +# for caching of zookeeper archives +zookeeper_local_download_directory: ~/.cache/ansible/zookeeper diff --git a/tasks/main.yml b/tasks/main.yml index 9c439b1..618c10b 100644 --- a/tasks/main.yml +++ b/tasks/main.yml @@ -62,7 +62,33 @@ - _zookeeper_current_release_path.stat.islnk is defined - not _zookeeper_current_release_path.stat.islnk -- name: Download ZooKeeper +- name: Download ZooKeeper archive locally and copy to hosts + when: zookeeper_local_download_directory | d() + block: + - name: Create local download directory + ansible.builtin.file: + path: "{{ zookeeper_local_download_directory }}" + mode: " {{ zookeeper_local_download_directory_mode | d('0755') }}" + state: directory + delegate_to: localhost + + - name: Download ZooKeeper archive + ansible.builtin.get_url: + url: "{{ zookeeper_download_url }}" + dest: "{{ zookeeper_local_download_directory }}/{{ zookeeper_download_url | basename }}" + checksum: "{{ zookeeper_download_checksum | d(omit) }}" + mode: "0644" + delegate_to: localhost + ignore_errors: "{{ ansible_check_mode }}" + + - name: Copy ZooKeeper archive to hosts + ansible.builtin.copy: + src: "{{ zookeeper_local_download_directory }}/{{ zookeeper_download_url | basename }}" + dest: "{{ zookeeper_download_directory }}" + mode: "0644" + register: _zookeeper_copy + +- name: Download ZooKeeper archive on hosts ansible.builtin.get_url: url: "{{ zookeeper_download_url }}" dest: "{{ zookeeper_download_directory }}/{{ zookeeper_download_url | basename }}" @@ -70,6 +96,7 @@ mode: "0644" register: _zookeeper_download ignore_errors: "{{ ansible_check_mode }}" + when: not zookeeper_local_download_directory | d() - name: Unarchive ZooKeeper ansible.builtin.unarchive: @@ -79,7 +106,10 @@ remote_src: true extra_opts: - --strip-components=1 - when: _zookeeper_download is changed or (zookeeper_force_unarchive | d()) # noqa no-handler + when: >- + (_zookeeper_copy | d()) is changed or + (_zookeeper_download | d()) is changed or + (zookeeper_force_unarchive | d()) - name: Install ZooKeeper symlink ansible.builtin.file: