zuul-jobs/roles/ensure-quay-repo/tasks/create.yaml
Clark Boylan 3db2bfe8d1 Skip quay repo creation if necessary info is missing
We try to be smart about when we attempt to create repos in quay. One
thing that was missing was checking if necessary info for the API
request is present. Skip attempting creating if not present.

Change-Id: I61e603c4d07280079e560215685bf09ebc0c4263
2023-04-28 15:08:04 -07:00

58 lines
2.3 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
- zj_image.namespace is defined
- zj_image.repo_shortname is defined
- zj_image.repo_description is defined