1
0
Fork 0
mirror of https://github.com/containers/ansible-podman-collections.git synced 2026-02-04 07:11:49 +00:00

Reapply "Fix transports issues in podman_image (#619)" (#754) (#755)

This reverts commit 391e4c54ef.

Signed-off-by: Sagi Shnaidman <sshnaidm@redhat.com>
Signed-off-by: Derek <derek@frisbeeworld.com>
This commit is contained in:
Sergey 2024-05-29 18:27:07 +03:00 committed by Derek
parent f13819a6c3
commit 989dfaec67
3 changed files with 546 additions and 39 deletions

View file

@ -176,6 +176,7 @@ DOCUMENTATION = r'''
type: str
choices:
- dir
- docker
- docker-archive
- docker-daemon
- oci-archive
@ -557,16 +558,8 @@ class PodmanImageManager(object):
self.results['changed'] = True
if self.push:
# Push the image
if '/' in self.image_name:
push_format_string = 'Pushed image {image_name}'
else:
push_format_string = 'Pushed image {image_name} to {dest}'
self.results['actions'].append(push_format_string.format(image_name=self.image_name, dest=self.push_args['dest']))
self.results['changed'] = True
if not self.module.check_mode:
self.results['image'], output = self.push_image()
self.results['stdout'] += "\n" + output
self.results['image'], output = self.push_image()
self.results['stdout'] += "\n" + output
if image and not self.results.get('image'):
self.results['image'] = image
@ -787,45 +780,44 @@ class PodmanImageManager(object):
# Build the destination argument
dest = self.push_args.get('dest')
dest_format_string = '{dest}/{image_name}'
regexp = re.compile(r'/{name}(:{tag})?'.format(name=self.name, tag=self.tag))
if not dest:
if '/' not in self.name:
self.module.fail_json(msg="'push_args['dest']' is required when pushing images that do not have the remote registry in the image name")
# If the push destination contains the image name and/or the tag
# remove it and warn since it's not needed.
elif regexp.search(dest):
dest = regexp.sub('', dest)
self.module.warn("Image name and tag are automatically added to push_args['dest']. Destination changed to {dest}".format(dest=dest))
if dest and dest.endswith('/'):
dest = dest[:-1]
transport = self.push_args.get('transport')
if dest is None:
dest = self.image_name
if transport:
if not dest:
self.module.fail_json("'push_args['transport'] requires 'push_args['dest'] but it was not provided.")
if transport == 'docker':
dest_format_string = '{transport}://{dest}'
elif transport == 'ostree':
dest_format_string = '{transport}:{name}@{dest}'
else:
dest_format_string = '{transport}:{dest}'
if transport == 'docker-daemon' and ":" not in dest:
dest_format_string = '{transport}:{dest}:latest'
dest_string = dest_format_string.format(transport=transport, name=self.name, dest=dest)
else:
dest_string = dest
dest_string = dest_format_string.format(transport=transport, name=self.name, dest=dest, image_name=self.image_name,)
if "/" not in dest_string and "@" not in dest_string and "docker-daemon" not in dest_string:
self.module.fail_json(msg="Destination must be a full URL or path to a directory.")
# Only append the destination argument if the image name is not a URL
if '/' not in self.name:
args.append(dest_string)
args.append(dest_string)
self.module.log("PODMAN-IMAGE-DEBUG: Pushing image {image_name} to {dest_string}".format(
image_name=self.image_name, dest_string=dest_string))
self.results['actions'].append(" ".join(args))
self.results['podman_actions'].append(" ".join([self.executable] + args))
self.results['changed'] = True
out, err = '', ''
if not self.module.check_mode:
rc, out, err = self._run(args, ignore_errors=True)
if rc != 0:
self.module.fail_json(msg="Failed to push image {image_name}".format(
image_name=self.image_name),
stdout=out, stderr=err,
actions=self.results['actions'],
podman_actions=self.results['podman_actions'])
rc, out, err = self._run(args, ignore_errors=True)
if rc != 0:
self.module.fail_json(msg="Failed to push image {image_name}: {err}".format(image_name=self.image_name, err=err))
last_id = self._get_id_from_output(
out + err, contains=':', split_on=':')
return self.inspect_image(last_id), out + err
return self.inspect_image(self.image_name), out + err
def remove_image(self, image_name=None):
if image_name is None:
@ -922,6 +914,7 @@ def main():
'docker-daemon',
'oci-archive',
'ostree',
'docker'
]
),
),

View file

@ -0,0 +1,488 @@
---
- containers.podman.podman_image:
name: testimage2
pull: false
push: true
ignore_errors: true
register: img_result1
- name: Check outputs
assert:
that:
- img_result1 is failed
- "'Destination must be a full URL or path to a directory' in img_result1.msg"
- containers.podman.podman_image:
name: quay.io/testing/testimage
pull: false
push: true
ignore_errors: true
register: img_result2
- name: Check outputs
assert:
that:
- "'authentication required' in img_result2.stderr"
- "'push quay.io/testing/testimage:latest quay.io/testing/testimage:latest' in img_result2.actions"
- containers.podman.podman_image:
name: quay.io/testing/testimage:draft
pull: false
push: true
ignore_errors: true
register: img_result2a
- name: Check outputs
assert:
that:
- "'authentication required' in img_result2a.stderr"
- "'push quay.io/testing/testimage:draft quay.io/testing/testimage:draft' in img_result2a.actions"
- containers.podman.podman_image:
name: quay.io/testing/testimage
pull: false
push: true
push_args:
dest: quay.io/testing/testimage
ignore_errors: true
register: img_result3
- name: Check outputs
assert:
that:
- "'authentication required' in img_result3.stderr"
- "'push quay.io/testing/testimage:latest quay.io/testing/testimage' in img_result3.actions"
- containers.podman.podman_image:
name: quay.io/testing/testimage:draft
pull: false
push: true
push_args:
dest: quay.io/testing/testimage
ignore_errors: true
register: img_result3a
- name: Check outputs
assert:
that:
- "'authentication required' in img_result3a.stderr"
- "'push quay.io/testing/testimage:draft quay.io/testing/testimage' in img_result3a.actions"
- containers.podman.podman_image:
name: quay.io/testing/testimage:draft
pull: false
push: true
push_args:
dest: quay.io/testing/testimage:nodraft
ignore_errors: true
register: img_result3b
- name: Check outputs
assert:
that:
- "'authentication required' in img_result3b.stderr"
- "'push quay.io/testing/testimage:draft quay.io/testing/testimage:nodraft' in img_result3b.actions"
- containers.podman.podman_image:
name: testimage2
tag: testtag
pull: false
push: true
push_args:
dest: quay.io/testing/testimage
ignore_errors: true
register: img_result4
- name: Check outputs
assert:
that:
- "'authentication required' in img_result4.stderr"
- "'push testimage2:testtag quay.io/testing/testimage' in img_result4.actions"
- containers.podman.podman_image:
name: testimage2
pull: false
push: true
push_args:
dest: /tmp/testimage-dir
transport: dir
ignore_errors: true
register: img_result5
- name: Check outputs
assert:
that:
- img_result5 is changed
- "'push testimage2:latest dir:/tmp/testimage-dir' in img_result5.actions"
- containers.podman.podman_image:
name: testimage2
pull: false
push: true
push_args:
dest: dir:/tmp/testimage-dir1
ignore_errors: true
register: img_result6
- name: Check outputs
assert:
that:
- img_result6 is changed
- "'push testimage2:latest dir:/tmp/testimage-dir1' in img_result6.actions"
- name: Remove directories
file:
path: "{{ item }}"
state: absent
loop:
- /tmp/test-docker-arch
- /tmp/test-docker-arch1
- containers.podman.podman_image:
name: testimage2
pull: false
push: true
push_args:
dest: /tmp/test-docker-arch
transport: docker-archive
ignore_errors: true
register: img_result7
- name: Check outputs
assert:
that:
- img_result7 is changed
- "'push testimage2:latest docker-archive:/tmp/test-docker-arch' in img_result7.actions"
- containers.podman.podman_image:
name: testimage2
pull: false
push: true
push_args:
dest: docker-archive:/tmp/test-docker-arch1
ignore_errors: true
register: img_result8
- name: Check outputs
assert:
that:
- img_result8 is changed
- "'push testimage2:latest docker-archive:/tmp/test-docker-arch1' in img_result8.actions"
- containers.podman.podman_image:
name: testimage2
pull: false
push: true
push_args:
dest: /tmp/test-oci-arch
transport: oci-archive
ignore_errors: true
register: img_result9
- name: Check outputs
assert:
that:
- img_result9 is changed
- "'push testimage2:latest oci-archive:/tmp/test-oci-arch' in img_result9.actions"
- containers.podman.podman_image:
name: testimage2
pull: false
push: true
push_args:
dest: oci-archive:/tmp/test-oci-arch1
ignore_errors: true
register: img_result10
- name: Check outputs
assert:
that:
- img_result10 is changed
- "'push testimage2:latest oci-archive:/tmp/test-oci-arch1' in img_result10.actions"
- containers.podman.podman_image:
name: testimage2
pull: false
push: true
push_args:
dest: quay.io/testing/testimage1
transport: docker
ignore_errors: true
register: img_result11
- name: Check outputs
assert:
that:
- "'authentication required' in img_result11.stderr"
- "'push testimage2:latest docker://quay.io/testing/testimage1' in img_result11.actions"
- containers.podman.podman_image:
name: testimage2
pull: false
push: true
push_args:
dest: docker://quay.io/testing/testimage22
ignore_errors: true
register: img_result12
- name: Check outputs
assert:
that:
- "'authentication required' in img_result12.stderr"
- "'push testimage2:latest docker://quay.io/testing/testimage22' in img_result12.actions"
- containers.podman.podman_image:
name: testimage2
pull: false
push: true
push_args:
dest: dockerimage
transport: docker-daemon
ignore_errors: true
register: img_result13
- name: Check outputs
assert:
that:
- img_result13 is changed
- "'push testimage2:latest docker-daemon:dockerimage:latest' in img_result13.actions"
- containers.podman.podman_image:
name: testimage2
pull: false
push: true
push_args:
dest: docker-daemon:dockerimage2
ignore_errors: true
register: img_result14
- name: Check outputs
assert:
that:
- img_result14 is failure
- "'push testimage2:latest docker-daemon:dockerimage2' in img_result14.actions"
- containers.podman.podman_image:
name: testimage2
pull: false
push: true
push_args:
dest: dockerimage:tagged1
transport: docker-daemon
ignore_errors: true
register: img_result15
- name: Check outputs
assert:
that:
- img_result15 is success
- "'push testimage2:latest docker-daemon:dockerimage:tagged1' in img_result15.actions"
- containers.podman.podman_image:
name: testimage2
pull: false
push: true
push_args:
dest: docker-daemon:dockerimage:tagged
ignore_errors: true
register: img_result16
- name: Check outputs
assert:
that:
- img_result16 is success
- "'push testimage2:latest docker-daemon:dockerimage:tagged' in img_result16.actions"
- containers.podman.podman_image:
name: quay.io/testing/testimage
pull: false
push: true
push_args:
dest: /tmp/testimage-dir25
transport: dir
ignore_errors: true
register: img_result17
- name: Check outputs
assert:
that:
- img_result17 is success
- "'push quay.io/testing/testimage:latest dir:/tmp/testimage-dir25' in img_result17.actions"
- containers.podman.podman_image:
name: quay.io/testing/testimage
pull: false
push: true
push_args:
dest: dir:/tmp/testimage-dir15
ignore_errors: true
register: img_result18
- name: Check outputs
assert:
that:
- img_result18 is success
- "'push quay.io/testing/testimage:latest dir:/tmp/testimage-dir15' in img_result18.actions"
- name: Remove directories for docker-archive
file:
path: "{{ item }}"
state: absent
loop:
- /tmp/test-docker-arch5
- /tmp/test-docker-arch15
- containers.podman.podman_image:
name: quay.io/testing/testimage
pull: false
push: true
push_args:
dest: /tmp/test-docker-arch5
transport: docker-archive
ignore_errors: true
register: img_result19
- name: Check outputs
assert:
that:
- img_result19 is success
- "'push quay.io/testing/testimage:latest docker-archive:/tmp/test-docker-arch5' in img_result19.actions"
- containers.podman.podman_image:
name: quay.io/testing/testimage
pull: false
push: true
push_args:
dest: docker-archive:/tmp/test-docker-arch15
ignore_errors: true
register: img_result20
- name: Check outputs
assert:
that:
- img_result20 is success
- "'push quay.io/testing/testimage:latest docker-archive:/tmp/test-docker-arch15' in img_result20.actions"
- containers.podman.podman_image:
name: quay.io/testing/testimage
pull: false
push: true
push_args:
dest: /tmp/test-oci-arch5
transport: oci-archive
ignore_errors: true
register: img_result21
- name: Check outputs
assert:
that:
- img_result21 is success
- "'push quay.io/testing/testimage:latest oci-archive:/tmp/test-oci-arch5' in img_result21.actions"
- containers.podman.podman_image:
name: quay.io/testing/testimage
pull: false
push: true
push_args:
dest: oci-archive:/tmp/test-oci-arch15
ignore_errors: true
register: img_result22
- name: Check outputs
assert:
that:
- img_result22 is success
- "'push quay.io/testing/testimage:latest oci-archive:/tmp/test-oci-arch15' in img_result22.actions"
- containers.podman.podman_image:
name: quay.io/testing/testimage
pull: false
push: true
push_args:
dest: quay.io/testing/testimage5
transport: docker
ignore_errors: true
register: img_result23
- name: Check outputs
assert:
that:
- "'authentication required' in img_result23.stderr"
- "'push quay.io/testing/testimage:latest docker://quay.io/testing/testimage5' in img_result23.actions"
- containers.podman.podman_image:
name: quay.io/testing/testimage
pull: false
push: true
push_args:
dest: docker://quay.io/testing/testimage22
ignore_errors: true
register: img_result24
- name: Check outputs
assert:
that:
- "'authentication required' in img_result24.stderr"
- "'push quay.io/testing/testimage:latest docker://quay.io/testing/testimage22' in img_result24.actions"
- containers.podman.podman_image:
name: quay.io/testing/testimage
pull: false
push: true
push_args:
dest: dockerimage5
transport: docker-daemon
ignore_errors: true
register: img_result25
- name: Check outputs
assert:
that:
- img_result25 is success
- "'push quay.io/testing/testimage:latest docker-daemon:dockerimage5:latest' in img_result25.actions"
- containers.podman.podman_image:
name: quay.io/testing/testimage
pull: false
push: true
push_args:
dest: docker-daemon:dockerimage25
ignore_errors: true
register: img_result26
- name: Check outputs
assert:
that:
- img_result26 is failed
- "'push quay.io/testing/testimage:latest docker-daemon:dockerimage25' in img_result26.actions"
- containers.podman.podman_image:
name: quay.io/testing/testimage
pull: false
push: true
push_args:
dest: dockerimage:tagged15
transport: docker-daemon
ignore_errors: true
register: img_result27
- name: Check outputs
assert:
that:
- img_result27 is success
- "'push quay.io/testing/testimage:latest docker-daemon:dockerimage:tagged15' in img_result27.actions"
- containers.podman.podman_image:
name: quay.io/testing/testimage
pull: false
push: true
push_args:
dest: docker-daemon:dockerimage:tagged5
ignore_errors: true
register: img_result28
- name: Check outputs
assert:
that:
- img_result28 is success
- "'push quay.io/testing/testimage:latest docker-daemon:dockerimage:tagged5' in img_result28.actions"

View file

@ -227,7 +227,7 @@
file: /var/tmp/build/Dockerfile
register: oci_build5
- name: Build OCI image, point to location of Containerfile and path
- name: Build OCI image with no Containerfile and path
containers.podman.podman_image:
executable: "{{ test_executable | default('podman') }}"
name: testimage5x
@ -350,6 +350,28 @@
- item.Architecture == "arm"
loop: "{{ imageinfo_arch.images }}"
- name: Build Docker image
containers.podman.podman_image:
executable: "{{ test_executable | default('podman') }}"
name: quay.io/testing/testimage
path: /var/tmp/build
register: build_image1
- name: Build Docker image - 2
containers.podman.podman_image:
executable: "{{ test_executable | default('podman') }}"
name: quay.io/testing/testimage:draft
path: /var/tmp/build
- name: Build Docker image
containers.podman.podman_image:
executable: "{{ test_executable | default('podman') }}"
name: testimage2:testtag
path: /var/tmp/build
register: build_image2
- include_tasks: idem_push.yml
- name: Create a Quadlet for image with filename
containers.podman.podman_image:
executable: "{{ test_executable | default('podman') }}"
@ -490,4 +512,8 @@
- quay.io/coreos/etcd:v3.3.11
- localhost/testimage
- localhost/testimage2
- localhost/testimage2:testtag
- localhost/testimage3
- localhost/dockerimage
- quay.io/testing/testimage
- quay.io/testing/testimage:draft