Merge "Add prepare-workspace-git role"
This commit is contained in:
commit
dd3f9fe00b
|
@ -0,0 +1,17 @@
|
|||
Mirror the local git repos to remote nodes
|
||||
|
||||
This role uses git operations (unlike :zuul:role:`prepare-workspace`
|
||||
which uses rsync) to mirror the locally prepared git repos to the remote
|
||||
nodes while taking advantage of cached repos on the node if they exist.
|
||||
This role works generically regardless of the existence of a cached
|
||||
repo on the node.
|
||||
|
||||
The cached repos need to be placed using the canonical name under the
|
||||
`cached_repos_root` directory.
|
||||
|
||||
**Role Variables**
|
||||
|
||||
.. zuul:rolevar:: cached_repos_root
|
||||
:default: /opt/git
|
||||
|
||||
The root of the cached repos.
|
|
@ -0,0 +1 @@
|
|||
cached_repos_root: /opt/git
|
|
@ -0,0 +1,56 @@
|
|||
- name: Find locally cached git repos
|
||||
stat:
|
||||
path: "{{ cached_repos_root }}/{{ item.canonical_name }}"
|
||||
with_items: "{{ zuul.projects.values() | list }}"
|
||||
register: cached_repos
|
||||
|
||||
# We do a bare clone here first so that we skip creating a working copy that
|
||||
# will be overwritten later anyway.
|
||||
- name: Clone cached repo to workspace
|
||||
shell: |
|
||||
set -e
|
||||
git clone --bare {{ cached_repos_root }}/{{ item.0.canonical_name }} {{ ansible_user_dir }}/{{ item.0.src_dir}}/.git
|
||||
cd {{ ansible_user_dir }}/{{ item.0.src_dir }}
|
||||
git config --local --bool core.bare false
|
||||
args:
|
||||
creates: "{{ ansible_user_dir }}/{{ item.0.src_dir}}"
|
||||
when: item.1.stat.exists
|
||||
with_together:
|
||||
- "{{ zuul.projects.values() | list }}"
|
||||
- "{{ cached_repos.results }}"
|
||||
# ANSIBLE0006: If we use the git module, we get warning
|
||||
# ANSIBLE0004 since we do not give an explicit version
|
||||
tags:
|
||||
- skip_ansible_lint
|
||||
|
||||
- name: Initialize non-cached repos
|
||||
command: "git init {{ ansible_user_dir }}/{{ item.0.src_dir}}"
|
||||
args:
|
||||
creates: "{{ ansible_user_dir }}/{{ item.0.src_dir}}"
|
||||
when: not item.1.stat.exists
|
||||
with_together:
|
||||
- "{{ zuul.projects.values() | list }}"
|
||||
- "{{ cached_repos.results }}"
|
||||
# ANSIBLE0006: If we use the git module, we get warning
|
||||
# ANSIBLE0004 since we do not give an explicit version
|
||||
tags:
|
||||
- skip_ansible_lint
|
||||
|
||||
- name: Remove origin from local git repos and replace it by the zuul fake origin
|
||||
# To be idempotent, remove origin only if it's found in the local list.
|
||||
shell: |
|
||||
set -e
|
||||
git remote -v | grep origin && git remote rm origin || true
|
||||
git remote add origin file:///dev/null
|
||||
args:
|
||||
chdir: "{{ ansible_user_dir }}/{{ item.src_dir}}"
|
||||
with_items: "{{ zuul.projects.values() | list }}"
|
||||
# ANSIBLE0006: git remote is not supported by ansible module
|
||||
tags:
|
||||
- skip_ansible_lint
|
||||
|
||||
# TODO(tobiash): we might want to deprecate the role mirror-workspace-git-repos
|
||||
# and move it here.
|
||||
- name: Synchronize repos
|
||||
import_role:
|
||||
name: mirror-workspace-git-repos
|
Loading…
Reference in New Issue