docker_container: improve race condition behavior for detach:no, auto_remove:yes behavior (#47712)

* Don't die when get_container is called for container which is terminating during get_container call.

If it terminates between client.containers() and client.inspect_container(),
the module will fail with an error such as
    Error inspecting container: 404 Client Error: Not Found ("No such container: xxx")

* Add changelog.

(cherry picked from commit b9706e2ff5)
This commit is contained in:
Felix Fontein 2018-10-29 09:22:52 +01:00 committed by Toshio Kuratomi
parent 5bacb732ce
commit 08324198da
2 changed files with 8 additions and 1 deletions

View file

@ -0,0 +1,2 @@
bugfixes:
- "docker_container - fixing race condition when ``detach`` and ``auto_remove`` are both ``true``."

View file

@ -35,7 +35,7 @@ HAS_DOCKER_ERROR = None
try:
from requests.exceptions import SSLError
from docker import __version__ as docker_version
from docker.errors import APIError, TLSParameterError, NotFound
from docker.errors import APIError, NotFound, TLSParameterError
from docker.tls import TLSConfig
from docker.constants import DEFAULT_DOCKER_API_VERSION
from docker import auth
@ -119,6 +119,9 @@ if not HAS_DOCKER_PY:
class APIError(Exception):
pass
class NotFound(Exception): # noqa: F811
pass
def sanitize_result(data):
"""Sanitize data object for return to Ansible.
@ -442,6 +445,8 @@ class AnsibleDockerClient(Client):
self.log("Inspecting container Id %s" % result['Id'])
result = self.inspect_container(container=result['Id'])
self.log("Completed container inspection")
except NotFound as exc:
return None
except Exception as exc:
self.fail("Error inspecting container: %s" % exc)