docker_container: fix container removal when auto_remove is used (#48061)
* Fix container removal when auto_remove is used.
(cherry picked from commit af2b477950
)
This commit is contained in:
parent
9ac8763df2
commit
b0b9b4f7dd
2 changed files with 14 additions and 4 deletions
|
@ -0,0 +1,2 @@
|
|||
bugfixes:
|
||||
- "docker_container - do not fail when removing a container which has ``auto_remove: yes``."
|
|
@ -646,6 +646,7 @@ try:
|
|||
from docker.types import Ulimit, LogConfig
|
||||
else:
|
||||
from docker.utils.types import Ulimit, LogConfig
|
||||
from docker.errors import APIError, NotFound
|
||||
except Exception as dummy:
|
||||
# missing docker-py handled in ansible.module_utils.docker
|
||||
pass
|
||||
|
@ -2040,7 +2041,7 @@ class ContainerManager(DockerBaseClass):
|
|||
if status != 0:
|
||||
self.fail(output, status=status)
|
||||
if self.parameters.cleanup:
|
||||
self.container_remove(container_id, force=True, ignore_failure=self.parameters.auto_remove)
|
||||
self.container_remove(container_id, force=True)
|
||||
insp = self._get_container(container_id)
|
||||
if insp.raw:
|
||||
insp.raw['Output'] = output
|
||||
|
@ -2049,7 +2050,7 @@ class ContainerManager(DockerBaseClass):
|
|||
return insp
|
||||
return self._get_container(container_id)
|
||||
|
||||
def container_remove(self, container_id, link=False, force=False, ignore_failure=False):
|
||||
def container_remove(self, container_id, link=False, force=False):
|
||||
volume_state = (not self.parameters.keep_volumes)
|
||||
self.log("remove container container:%s v:%s link:%s force%s" % (container_id, volume_state, link, force))
|
||||
self.results['actions'].append(dict(removed=container_id, volume_state=volume_state, link=link, force=force))
|
||||
|
@ -2058,9 +2059,16 @@ class ContainerManager(DockerBaseClass):
|
|||
if not self.check_mode:
|
||||
try:
|
||||
response = self.client.remove_container(container_id, v=volume_state, link=link, force=force)
|
||||
except Exception as exc:
|
||||
if not ignore_failure:
|
||||
except NotFound as exc:
|
||||
pass
|
||||
except APIError as exc:
|
||||
if exc.response.status_code == 409 and ('removal of container ' in exc.explanation and
|
||||
' is already in progress' in exc.explanation):
|
||||
pass
|
||||
else:
|
||||
self.fail("Error removing container %s: %s" % (container_id, str(exc)))
|
||||
except Exception as exc:
|
||||
self.fail("Error removing container %s: %s" % (container_id, str(exc)))
|
||||
return response
|
||||
|
||||
def container_update(self, container_id, update_parameters):
|
||||
|
|
Loading…
Reference in a new issue