1
0
Fork 0
mirror of https://github.com/ansible-collections/community.general.git synced 2024-09-14 20:13:21 +02:00

docker_container: fix behavior when image is not specified (#46322)

* Don't simply ignore container in present() if image is not specified.

* Use image from existing container for recreation if not specified.

* Added changelog.

* Improve comment.
This commit is contained in:
Felix Fontein 2018-10-06 15:50:12 +02:00 committed by John R Barker
parent 25dfa78dc2
commit 895019c59b
2 changed files with 37 additions and 26 deletions

View file

@ -0,0 +1,2 @@
bugfixes:
- "docker_container - the behavior is improved in case ``image`` is not specified, but needed for (re-)creating the container."

View file

@ -1912,13 +1912,17 @@ class ContainerManager(DockerBaseClass):
container = self._get_container(self.parameters.name)
# If the image parameter was passed then we need to deal with the image
# version comparison, otherwise we should not care
if self.parameters.image:
# version comparison. Otherwise we handle this depending on whether
# the container already runs or not; in the former case, in case the
# container needs to be restarted, we use the existing container's
# image ID.
image = self._get_image()
self.log(image, pretty_print=True)
if not container.exists:
# New container
self.log('No container found')
if not self.parameters.image:
self.fail('Cannot create container when image is not specified!')
new_container = self.container_create(self.parameters.image, self.parameters.create_parameters)
if new_container:
container = new_container
@ -1934,10 +1938,15 @@ class ContainerManager(DockerBaseClass):
self.diff['image_different'] = True
self.log("differences")
self.log(differences, pretty_print=True)
image_to_use = self.parameters.image
if not image_to_use and container and container.Image:
image_to_use = container.Image
if not image_to_use:
self.fail('Cannot recreate container when image is not specified or cannot be extracted from current container!')
if container.running:
self.container_stop(container.Id)
self.container_remove(container.Id)
new_container = self.container_create(self.parameters.image, self.parameters.create_parameters)
new_container = self.container_create(image_to_use, self.parameters.create_parameters)
if new_container:
container = new_container