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: warn if ipvX_address is used for networks but not supported by docker-py (#47395)

* Only add parameters which are actually used.

* Fail if ipvX_address is used when not supported.

* Added changelog.
This commit is contained in:
Felix Fontein 2018-10-23 08:52:08 +02:00 committed by John R Barker
parent 3afdb28209
commit 4ffe3b14d4
2 changed files with 16 additions and 6 deletions

View file

@ -0,0 +1,2 @@
bugfixes:
- "docker_container - fail if ``ipv4_address`` or ``ipv6_address`` is used with a too old docker-py version."

View file

@ -2154,12 +2154,10 @@ class ContainerManager(DockerBaseClass):
self.fail("Error disconnecting container from network %s - %s" % (diff['parameter']['name'], self.fail("Error disconnecting container from network %s - %s" % (diff['parameter']['name'],
str(exc))) str(exc)))
# connect to the network # connect to the network
params = dict( params = dict()
ipv4_address=diff['parameter'].get('ipv4_address', None), for para in ('ipv4_address', 'ipv6_address', 'links', 'aliases'):
ipv6_address=diff['parameter'].get('ipv6_address', None), if diff['parameter'].get(para):
links=diff['parameter'].get('links', None), params[para] = diff['parameter'][para]
aliases=diff['parameter'].get('aliases', None)
)
self.results['actions'].append(dict(added_to_network=diff['parameter']['name'], network_parameters=params)) self.results['actions'].append(dict(added_to_network=diff['parameter']['name'], network_parameters=params))
if not self.check_mode: if not self.check_mode:
try: try:
@ -2436,6 +2434,16 @@ class AnsibleDockerClientContainer(AnsibleDockerClient):
self.module.warn("docker API version is %s. Minimum version required is 1.25 to set or " self.module.warn("docker API version is %s. Minimum version required is 1.25 to set or "
"update the container's stop_timeout configuration." % (docker_api_version,)) "update the container's stop_timeout configuration." % (docker_api_version,))
ipvX_address_supported = LooseVersion(docker_version) >= LooseVersion('1.9')
if not ipvX_address_supported:
ipvX_address_used = False
for network in self.module.params.get("networks", []):
if 'ipv4_address' in network or 'ipv6_address' in network:
ipvX_address_used = True
if ipvX_address_used:
self.fail("docker or docker-py version is %s. Minimum version required is 1.9 to use "
"ipv4_address or ipv6_address in networks." % (docker_version,))
runtime_supported = LooseVersion(docker_api_version) >= LooseVersion('1.12') runtime_supported = LooseVersion(docker_api_version) >= LooseVersion('1.12')
if self.module.params.get("runtime") and not runtime_supported: if self.module.params.get("runtime") and not runtime_supported:
self.fail('docker API version is %s. Minimum version required is 1.12 to set runtime option.' % (docker_api_version,)) self.fail('docker API version is %s. Minimum version required is 1.12 to set runtime option.' % (docker_api_version,))