a6fab9c48f
To avoid errors in case of mirror race conditions, we currently (try to) ignore mirror errors, and check for presence of the reference after the mirror try. This requires having to play tricks to avoid errors when the job is run in the check pipeline, due to missing zuul.newrev. And for some reason, it does not seem to work[1]. Instead of ignoring errors and running an additional check, let's just retry the mirror operation three times. The race is rare-enough that it's very unlikely that we would hit it three times in a row. [1] https://zuul.openstack.org/build/4966cd5617624d348fa0048de14f1f96 Change-Id: Ifa4f25ad8c961a1b2dbd9f07a3a1e4652b790c9c
66 lines
2.0 KiB
YAML
66 lines
2.0 KiB
YAML
- block:
|
|
- name: Create SSH private key tempfile
|
|
tempfile:
|
|
state: file
|
|
register: ssh_private_key_tmp
|
|
|
|
- name: Set up private key
|
|
copy:
|
|
content: "{{ git_mirror_credentials.ssh_key }}"
|
|
dest: "{{ ssh_private_key_tmp.path }}"
|
|
mode: 0600
|
|
|
|
- name: Generate SSH configuration
|
|
set_fact:
|
|
ssh_config: |
|
|
host {{ git_mirror_credentials.host }}
|
|
HostName {{ git_mirror_credentials.host }}
|
|
IdentityFile {{ ssh_private_key_tmp.path }}
|
|
User {{ git_mirror_credentials.user }}
|
|
|
|
- name: Write SSH configuration to ~/.ssh/config
|
|
blockinfile:
|
|
state: present
|
|
path: "{{ ansible_user_dir }}/.ssh/config"
|
|
create: yes
|
|
mode: 0600
|
|
block: "{{ ssh_config }}"
|
|
|
|
- name: Add host key to known hosts
|
|
known_hosts:
|
|
state: present
|
|
name: "{{ git_mirror_credentials.host }}"
|
|
key: "{{ git_mirror_credentials.host_key }}"
|
|
|
|
- name: Mirror the git repository
|
|
command: git push --mirror {{ git_mirror_credentials.user }}@{{ git_mirror_credentials.host }}:{{ git_mirror_repository }}
|
|
args:
|
|
chdir: "{{ ansible_user_dir }}/{{ zuul.project.src_dir }}"
|
|
tags:
|
|
- skip_ansible_lint
|
|
register: result
|
|
retries: 3
|
|
delay: 5
|
|
until: result is not failed
|
|
|
|
always:
|
|
# Registered variables below are only used for integration testing
|
|
- name: Remove SSH private key from disk
|
|
command: "shred --remove {{ ssh_private_key_tmp.path }}"
|
|
register: git_mirror_key_removed
|
|
|
|
- name: Remove SSH configuration in ~/.ssh/config
|
|
blockinfile:
|
|
state: absent
|
|
path: "{{ ansible_user_dir }}/.ssh/config"
|
|
mode: 0600
|
|
block: "{{ ssh_config }}"
|
|
register: git_mirror_ssh_config_removed
|
|
|
|
- name: Remove host key from known hosts
|
|
known_hosts:
|
|
state: absent
|
|
name: "{{ git_mirror_credentials.host }}"
|
|
key: "{{ git_mirror_credentials.host_key }}"
|
|
register: git_mirror_host_key_removed
|