zuul-registry/playbooks/functional-test/docker.yaml
Mohammed Naser 8190671962 Fix "docker manifest create" issue
This patch resolves the issue that causes Docker to fail when
it runs the "docker manifest create" command since the registry
does not mention that it supports the 2.0 API inside it's
headers.

Change-Id: I777bd4218c822fa665f0d29f573a6ae120194284
2022-04-06 15:37:07 -04:00

97 lines
3.4 KiB
YAML

# Test push and pull from the standard registry
- name: Start the registry
shell:
cmd: docker-compose up -d
chdir: "{{ ansible_user_dir }}/src/opendev.org/zuul/zuul-registry/playbooks/functional-test"
- name: Print list of images
command: docker image ls --all --digests --no-trunc
register: image_list
failed_when: "'test/image' in image_list.stdout"
- name: Copy the test image into local docker image storage
command: >
skopeo copy
docker-archive:{{ workspace }}/test.img
docker-daemon:localhost:9000/test/image:latest
- name: Log in to registry
command: docker login localhost:9000 -u testuser -p testpass
- name: Push the test image to the registry
# Use a lot of concurrency to check registry with concurrent pushes
shell: printf "1\n2\n3\n4\n" | xargs -P 4 -I DNE docker push localhost:9000/test/image
args:
executable: /bin/bash
- name: Remove the test image from the local cache
command: docker rmi localhost:9000/test/image
- name: Print list of images
command: docker image ls --all --digests --no-trunc
register: image_list
failed_when: "'test/image' in image_list.stdout"
- name: Pull the image from the registry
command: docker pull localhost:9000/test/image
- name: Print list of images
command: docker image ls --all --digests --no-trunc
register: image_list
failed_when: "'test/image' not in image_list.stdout"
- name: Try to pull an image that does not exist
command: docker pull localhost:9000/test/dne
register: result
failed_when: result.rc != 1
- name: Remove the test image from the local cache
command: docker rmi localhost:9000/test/image
- name: Pull down the manifest for Alpine
command: docker manifest inspect docker.io/library/alpine:3
register: _docker_manifest_inspect
- name: Generate facts containing all the manifest tags
set_fact:
_alpine_tags:
amd64: "{{ _docker_manifest_inspect.stdout | trim | from_json | json_query('manifests[?platform.architecture == `amd64`].digest') | first }}"
arm64: "{{ _docker_manifest_inspect.stdout | trim | from_json | json_query('manifests[?platform.architecture == `arm64`].digest') | first }}"
- name: Pull down an image for two different architectures
command: docker pull docker.io/library/alpine@{{ item.value }}
with_dict: "{{ _alpine_tags }}"
- name: Retag both images and upload them to Zuul registry
command: docker tag docker.io/library/alpine@{{ item.value }} localhost:9000/alpine:3-{{ item.key }}
with_dict: "{{ _alpine_tags }}"
- name: Push both retagged images
command: docker push localhost:9000/alpine:3-{{ item.key }}
with_dict: "{{ _alpine_tags }}"
- name: Create a manifest with multi architecture images
command: docker manifest create localhost:9000/alpine:3 localhost:9000/alpine:3-amd64 localhost:9000/alpine:3-arm64
- name: Wipe all images from the local cache (tagged in DockerHub)
command: docker rmi docker.io/library/alpine@{{ item.value }}
with_dict: "{{ _alpine_tags }}"
- name: Wipe all images from the local cache (tagged in the registry)
command: docker rmi {{ item }}
loop:
- localhost:9000/alpine:3-amd64
- localhost:9000/alpine:3-arm64
- name: Stop the registry
shell:
cmd: docker-compose down
chdir: "{{ ansible_user_dir }}/src/opendev.org/zuul/zuul-registry/playbooks/functional-test"
- name: Clean up docker volumes
command: docker volume prune -f
- name: Log out of registry
command: docker logout localhost:9000