zuul-jobs/roles/ensure-quay-repo/tasks/create.yaml

55 lines
2.1 KiB
YAML

- name: Only run when necessary items are present
block:
- name: Set quay_root_url
set_fact:
quay_root_url: "https://{{ zj_image.registry }}"
when: container_registry_credentials[zj_image.registry].api_url is not defined
- name: Alias api_url
set_fact:
quay_root_url: "{{ container_registry_credentials[zj_image.registry].api_url }}"
when: container_registry_credentials[zj_image.registry].api_url is defined
- name: Set quay_repo_visibility
set_fact:
quay_repo_visibility: "public"
when: zj_image.visibility is not defined
- name: Alias visibility
set_fact:
quay_repo_visibility: "{{ zj_image.visibility }}"
when: zj_image.visibility is defined
- name: Create the repo in quay
no_log: true
uri:
url: "{{ quay_root_url }}/api/v1/repository"
method: POST
body_format: json
body:
namespace: "{{ zj_image.namespace }}"
repository: "{{ zj_image.repo_shortname}}"
description: "{{ zj_image.repo_description }}"
visibility: "{{ quay_repo_visibility }}"
headers:
Content-Type: application/json
Authorization: "Bearer {{ container_registry_credentials[zj_image.registry].api_token }}"
status_code:
- 201
# 400 is returned when the repo already exists.
# We double check this below.
- 400
register: quay_repo_create
delay: 5
retries: 3
- name: Fail if repo doesn't exist and we got a 400 status code
when:
- quay_repo_create.status == 400
- "'error_message' not in quay_repo_create.json or ('error_message' in quay_repo_create.json and quay_repo_create.json.error_message != 'Repository already exists')"
fail:
msg: "Could not create {{ quay_root_url }}/{{ zj_image.namespace }}/{{ zj_image.repo_shortname }}"
when:
- zj_image.registry == 'quay.io' or (container_registry_credentials[zj_image.registry].type is defined and container_registry_credentials[zj_image.registry].type == 'quay')
- container_registry_credentials[zj_image.registry].api_token is defined