mirror of
https://github.com/ansible-collections/community.general.git
synced 2024-09-14 20:13:21 +02:00
Backport of https://github.com/ansible-collections/community.docker/pull/87 to stable-1. (#1983)
This commit is contained in:
parent
3d3e47fc87
commit
1e1a843ff3
4 changed files with 25 additions and 5 deletions
|
@ -0,0 +1,5 @@
|
||||||
|
bugfixes:
|
||||||
|
- "docker_image - prevent module failure when removing image that is removed between inspection and removal (https://github.com/ansible-collections/community.docker/pull/87)."
|
||||||
|
- "docker_image - prevent module failure when removing non-existant image by ID (https://github.com/ansible-collections/community.docker/pull/87)."
|
||||||
|
- "docker_image_info - prevent module failure when image vanishes between listing and inspection (https://github.com/ansible-collections/community.docker/pull/87)."
|
||||||
|
- "docker_image_info - prevent module failure when querying non-existant image by ID (https://github.com/ansible-collections/community.docker/pull/87)."
|
|
@ -636,6 +636,9 @@ class AnsibleDockerClient(Client):
|
||||||
if len(images) == 1:
|
if len(images) == 1:
|
||||||
try:
|
try:
|
||||||
inspection = self.inspect_image(images[0]['Id'])
|
inspection = self.inspect_image(images[0]['Id'])
|
||||||
|
except NotFound:
|
||||||
|
self.log("Image %s:%s not found." % (name, tag))
|
||||||
|
return None
|
||||||
except Exception as exc:
|
except Exception as exc:
|
||||||
self.fail("Error inspecting image %s:%s - %s" % (name, tag, str(exc)))
|
self.fail("Error inspecting image %s:%s - %s" % (name, tag, str(exc)))
|
||||||
return inspection
|
return inspection
|
||||||
|
@ -643,7 +646,7 @@ class AnsibleDockerClient(Client):
|
||||||
self.log("Image %s:%s not found." % (name, tag))
|
self.log("Image %s:%s not found." % (name, tag))
|
||||||
return None
|
return None
|
||||||
|
|
||||||
def find_image_by_id(self, image_id):
|
def find_image_by_id(self, image_id, accept_missing_image=False):
|
||||||
'''
|
'''
|
||||||
Lookup an image (by ID) and return the inspection results.
|
Lookup an image (by ID) and return the inspection results.
|
||||||
'''
|
'''
|
||||||
|
@ -653,6 +656,11 @@ class AnsibleDockerClient(Client):
|
||||||
self.log("Find image %s (by ID)" % image_id)
|
self.log("Find image %s (by ID)" % image_id)
|
||||||
try:
|
try:
|
||||||
inspection = self.inspect_image(image_id)
|
inspection = self.inspect_image(image_id)
|
||||||
|
except NotFound as exc:
|
||||||
|
if not accept_missing_image:
|
||||||
|
self.fail("Error inspecting image ID %s - %s" % (image_id, str(exc)))
|
||||||
|
self.log("Image %s not found." % image_id)
|
||||||
|
return None
|
||||||
except Exception as exc:
|
except Exception as exc:
|
||||||
self.fail("Error inspecting image ID %s - %s" % (image_id, str(exc)))
|
self.fail("Error inspecting image ID %s - %s" % (image_id, str(exc)))
|
||||||
return inspection
|
return inspection
|
||||||
|
|
|
@ -433,7 +433,7 @@ if docker_version is not None:
|
||||||
else:
|
else:
|
||||||
from docker.auth.auth import resolve_repository_name
|
from docker.auth.auth import resolve_repository_name
|
||||||
from docker.utils.utils import parse_repository_tag
|
from docker.utils.utils import parse_repository_tag
|
||||||
from docker.errors import DockerException
|
from docker.errors import DockerException, NotFound
|
||||||
except ImportError:
|
except ImportError:
|
||||||
# missing Docker SDK for Python handled in module_utils.docker.common
|
# missing Docker SDK for Python handled in module_utils.docker.common
|
||||||
pass
|
pass
|
||||||
|
@ -540,6 +540,8 @@ class ImageManager(DockerBaseClass):
|
||||||
self.client.fail('Cannot find the image %s locally.' % name)
|
self.client.fail('Cannot find the image %s locally.' % name)
|
||||||
if not self.check_mode and image and image['Id'] == self.results['image']['Id']:
|
if not self.check_mode and image and image['Id'] == self.results['image']['Id']:
|
||||||
self.results['changed'] = False
|
self.results['changed'] = False
|
||||||
|
else:
|
||||||
|
self.results['image'] = image
|
||||||
|
|
||||||
if self.archive_path:
|
if self.archive_path:
|
||||||
self.archive_image(self.name, self.tag)
|
self.archive_image(self.name, self.tag)
|
||||||
|
@ -557,7 +559,7 @@ class ImageManager(DockerBaseClass):
|
||||||
'''
|
'''
|
||||||
name = self.name
|
name = self.name
|
||||||
if is_image_name_id(name):
|
if is_image_name_id(name):
|
||||||
image = self.client.find_image_by_id(name)
|
image = self.client.find_image_by_id(name, accept_missing_image=True)
|
||||||
else:
|
else:
|
||||||
image = self.client.find_image(name, self.tag)
|
image = self.client.find_image(name, self.tag)
|
||||||
if self.tag:
|
if self.tag:
|
||||||
|
@ -566,6 +568,9 @@ class ImageManager(DockerBaseClass):
|
||||||
if not self.check_mode:
|
if not self.check_mode:
|
||||||
try:
|
try:
|
||||||
self.client.remove_image(name, force=self.force_absent)
|
self.client.remove_image(name, force=self.force_absent)
|
||||||
|
except NotFound:
|
||||||
|
# If the image vanished while we were trying to remove it, don't fail
|
||||||
|
pass
|
||||||
except Exception as exc:
|
except Exception as exc:
|
||||||
self.fail("Error removing image %s - %s" % (name, str(exc)))
|
self.fail("Error removing image %s - %s" % (name, str(exc)))
|
||||||
|
|
||||||
|
|
|
@ -167,7 +167,7 @@ import traceback
|
||||||
|
|
||||||
try:
|
try:
|
||||||
from docker import utils
|
from docker import utils
|
||||||
from docker.errors import DockerException
|
from docker.errors import DockerException, NotFound
|
||||||
except ImportError:
|
except ImportError:
|
||||||
# missing Docker SDK for Python handled in ansible.module_utils.docker.common
|
# missing Docker SDK for Python handled in ansible.module_utils.docker.common
|
||||||
pass
|
pass
|
||||||
|
@ -215,7 +215,7 @@ class ImageManager(DockerBaseClass):
|
||||||
for name in names:
|
for name in names:
|
||||||
if is_image_name_id(name):
|
if is_image_name_id(name):
|
||||||
self.log('Fetching image %s (ID)' % (name))
|
self.log('Fetching image %s (ID)' % (name))
|
||||||
image = self.client.find_image_by_id(name)
|
image = self.client.find_image_by_id(name, accept_missing_image=True)
|
||||||
else:
|
else:
|
||||||
repository, tag = utils.parse_repository_tag(name)
|
repository, tag = utils.parse_repository_tag(name)
|
||||||
if not tag:
|
if not tag:
|
||||||
|
@ -232,6 +232,8 @@ class ImageManager(DockerBaseClass):
|
||||||
for image in images:
|
for image in images:
|
||||||
try:
|
try:
|
||||||
inspection = self.client.inspect_image(image['Id'])
|
inspection = self.client.inspect_image(image['Id'])
|
||||||
|
except NotFound:
|
||||||
|
pass
|
||||||
except Exception as exc:
|
except Exception as exc:
|
||||||
self.fail("Error inspecting image %s - %s" % (image['Id'], str(exc)))
|
self.fail("Error inspecting image %s - %s" % (image['Id'], str(exc)))
|
||||||
results.append(inspection)
|
results.append(inspection)
|
||||||
|
|
Loading…
Reference in a new issue