zuul-jobs/test-playbooks/upload-git-mirror.yaml

96 lines
3.0 KiB
YAML

- name: Run tests for the upload-git-mirror role
hosts: all
vars:
test_repo: https://opendev.org/zuul/zuul-jobs
test_repo_path: "{{ ansible_user_dir }}/tests/zuul-jobs"
pre_tasks:
- name: Create tests directory
file:
path: "{{ ansible_user_dir }}/tests"
state: directory
# For pushing to localhost over ssh
- name: Create a test ssh keypair
command: "ssh-keygen -t rsa -b 2048 -N '' -f {{ ansible_user_dir }}/tests/id_rsa"
- name: Get test private key
command: "cat {{ ansible_user_dir }}/tests/id_rsa"
changed_when: false
register: private_key_contents
- name: Get test public key
command: "cat {{ ansible_user_dir }}/tests/id_rsa.pub"
changed_when: false
register: public_key_contents
- name: Add public key to authorized_keys
authorized_key:
user: "{{ ansible_user }}"
state: present
key: "{{ public_key_contents.stdout }}"
- name: Get localhost ssh host public key
shell: ssh-keyscan -t rsa localhost
args:
warn: false
register: host_key
tasks:
- name: Get git commit hash for current patch of zuul-jobs
command: git rev-parse HEAD
changed_when: false
args:
chdir: "{{ ansible_user_dir }}/{{ zuul.project.src_dir }}"
warn: false
register: current_commit
- name: Clone upstream zuul-jobs as a bare repository
git:
repo: "{{ test_repo }}"
dest: "{{ test_repo_path }}"
bare: yes
register: test_repo_clone
- name: Assert that the git repositories have different commits for HEAD
assert:
that:
- test_repo_clone.after != current_commit.stdout
- name: Run upload-git-mirror with specified credentials
vars:
git_mirror_credentials:
user: "{{ ansible_user }}"
host: localhost
ssh_key: "{{ private_key_contents.stdout }}"
host_key: "{{ host_key.stdout }}"
# TODO: key is renamed to ssh_key to prevent ambiguity with host_key.
# Remove key when the rename has landed in the role.
key: "{{ private_key_contents.stdout }}"
git_mirror_repository: "{{ test_repo_path }}"
include_role:
name: upload-git-mirror
- name: Get new repository HEAD commit
command: git rev-parse HEAD
changed_when: false
args:
chdir: "{{ test_repo_path }}"
warn: false
register: after_mirror
- name: Assert that the git repositories have the same commit for HEAD
assert:
that:
- after_mirror.stdout == current_commit.stdout
- name: Check that the private key has been removed
stat:
path: "{{ ssh_private_key_tmp.path }}"
register: private_key_stat
- name: Assert that the private key and the config was removed
assert:
that:
- git_mirror_key_removed is changed
- not private_key_stat.stat.exists
- git_mirror_ssh_config_removed is changed