Add role git-prepare-nodecache

The git-prepare-nodecache is a companion role that can be used to
create a git cache suitable to be used by the prepare-workspace-git
role.

Change-Id: I623eb8abc64d956069b4f18d7a1d61383a705ac9
This commit is contained in:
Tobias Henkel 2018-11-09 15:09:26 +01:00
parent 34cfe44ca5
commit f96d170932
No known key found for this signature in database
GPG Key ID: 03750DEC158E5FA2
3 changed files with 58 additions and 0 deletions

View File

@ -0,0 +1,15 @@
Prepare an archive containing all repositories that are part of the job. This
can be used to prepare the repos archive suitable for caching in the node
image to be used by `prepare-workspace-git`.
The path to the resulting archive file will be stored in the `git_cache_file`
variable. That variable can be used to push the archive to a place where
it will be picked up to be baked into the node image.
**Role variables**
.. zuul:rolevar:: git_cache_root
:default: {{ansible_user_dir }}/git-cache"
Directory where the git cache should be prepared. Usually this should not
be changed.

View File

@ -0,0 +1 @@
git_cache_root: "{{ansible_user_dir }}/git-cache"

View File

@ -0,0 +1,42 @@
- name: Create git parent dirs
file:
path: "{{ git_cache_root }}/{{ item.canonical_name | dirname }}"
state: directory
with_items: "{{ zuul.projects.values() | list }}"
- name: Copy git repos to {{ git_cache_root }}
command: cp -r "{{ ansible_user_dir }}/{{ item.src_dir }}/.git"
"{{ git_cache_root }}/{{ item.canonical_name }}"
with_items: "{{ zuul.projects.values() | list }}"
- name: Mark repos as bare
command: git config --bool core.bare true
args:
chdir: "{{ git_cache_root }}/{{ item.canonical_name }}"
with_items: "{{ zuul.projects.values() | list }}"
# We don't want git module foo, just set a config value.
tags:
- skip_ansible_lint
- name: Run git garbage collection
command: git gc
args:
chdir: "{{ git_cache_root }}/{{ item.canonical_name }}"
with_items: "{{ zuul.projects.values() | list }}"
# The ansible git module doesn't support garbage collection.
tags:
- skip_ansible_lint
- name: Set git_cache_file variable
set_fact:
git_cache_file: "{{ git_cache_root }}/repos.tar.gz"
- name: Create repos tarball
shell: |
tar -czf "{{ git_cache_file }}" *
args:
chdir: "{{ git_cache_root }}"
# Ansible lint wants we should use the unarchive module but we want the other
# way round.
tags:
- skip_ansible_lint