mirror of
https://github.com/ansible-collections/community.general.git
synced 2025-04-26 12:21:26 -07:00
Docker common consolidation (#49707)
* [docker] Consolidating Python Boolean conversion for Docker API (#49563) * [docker] Consolidating docker option min version checks (#49564) * [docker] Moving option min version checks out of docker_swarm (#49564) Also renaming Boolean cleanup function and fixing docker_container minimum version check for network interfaces. * Cleanup from PR feedback
This commit is contained in:
parent
8fcf9e1a28
commit
b67719ba1d
5 changed files with 132 additions and 227 deletions
|
@ -2745,27 +2745,43 @@ class AnsibleDockerClientContainer(AnsibleDockerClient):
|
|||
self.module.warn('The ignore_image option has been overridden by the comparisons option!')
|
||||
self.comparisons = comparisons
|
||||
|
||||
def _get_minimal_versions(self):
|
||||
# Helper function to detect whether any specified network uses ipv4_address or ipv6_address
|
||||
def _get_additional_minimal_versions(self):
|
||||
stop_timeout_supported = self.docker_api_version >= LooseVersion('1.25')
|
||||
stop_timeout_needed_for_update = self.module.params.get("stop_timeout") is not None and self.module.params.get('state') != 'absent'
|
||||
if stop_timeout_supported:
|
||||
stop_timeout_supported = self.docker_py_version >= LooseVersion('2.1')
|
||||
if stop_timeout_needed_for_update and not stop_timeout_supported:
|
||||
# We warn (instead of fail) since in older versions, stop_timeout was not used
|
||||
# to update the container's configuration, but only when stopping a container.
|
||||
self.module.warn("docker or docker-py version is %s. Minimum version required is 2.1 to update "
|
||||
"the container's stop_timeout configuration. "
|
||||
"If you use the 'docker-py' module, you have to switch to the docker 'Python' package." % (docker_version,))
|
||||
else:
|
||||
if stop_timeout_needed_for_update and not stop_timeout_supported:
|
||||
# We warn (instead of fail) since in older versions, stop_timeout was not used
|
||||
# to update the container's configuration, but only when stopping a container.
|
||||
self.module.warn("docker API version is %s. Minimum version required is 1.25 to set or "
|
||||
"update the container's stop_timeout configuration." % (self.docker_api_version_str,))
|
||||
self.option_minimal_versions['stop_timeout']['supported'] = stop_timeout_supported
|
||||
|
||||
def __init__(self, **kwargs):
|
||||
def detect_ipvX_address_usage():
|
||||
'''
|
||||
Helper function to detect whether any specified network uses ipv4_address or ipv6_address
|
||||
'''
|
||||
for network in self.module.params.get("networks") or []:
|
||||
if network.get('ipv4_address') is not None or network.get('ipv6_address') is not None:
|
||||
return True
|
||||
return False
|
||||
|
||||
self.option_minimal_versions = dict(
|
||||
option_minimal_versions = dict(
|
||||
# internal options
|
||||
log_config=dict(),
|
||||
publish_all_ports=dict(),
|
||||
ports=dict(),
|
||||
volume_binds=dict(),
|
||||
name=dict(),
|
||||
)
|
||||
for option, data in self.module.argument_spec.items():
|
||||
if option in self.__NON_CONTAINER_PROPERTY_OPTIONS:
|
||||
continue
|
||||
self.option_minimal_versions[option] = dict()
|
||||
self.option_minimal_versions.update(dict(
|
||||
# normal options
|
||||
device_read_bps=dict(docker_py_version='1.9.0', docker_api_version='1.22'),
|
||||
device_read_iops=dict(docker_py_version='1.9.0', docker_api_version='1.22'),
|
||||
device_write_bps=dict(docker_py_version='1.9.0', docker_api_version='1.22'),
|
||||
|
@ -2791,74 +2807,16 @@ class AnsibleDockerClientContainer(AnsibleDockerClient):
|
|||
pids_limit=dict(docker_py_version='1.10.0', docker_api_version='1.23'),
|
||||
# specials
|
||||
ipvX_address_supported=dict(docker_py_version='1.9.0', detect_usage=detect_ipvX_address_usage,
|
||||
usage_msg='ipv4_address or ipv6_address in networks'),
|
||||
stop_timeout=dict(), # see below!
|
||||
))
|
||||
usage_msg='ipv4_address or ipv6_address in networks'), # see above
|
||||
stop_timeout=dict(), # see _get_additional_minimal_versions()
|
||||
)
|
||||
|
||||
for option, data in self.option_minimal_versions.items():
|
||||
# Test whether option is supported, and store result
|
||||
support_docker_py = True
|
||||
support_docker_api = True
|
||||
if 'docker_py_version' in data:
|
||||
support_docker_py = self.docker_py_version >= LooseVersion(data['docker_py_version'])
|
||||
if 'docker_api_version' in data:
|
||||
support_docker_api = self.docker_api_version >= LooseVersion(data['docker_api_version'])
|
||||
data['supported'] = support_docker_py and support_docker_api
|
||||
# Fail if option is not supported but used
|
||||
if not data['supported']:
|
||||
# Test whether option is specified
|
||||
if 'detect_usage' in data:
|
||||
used = data['detect_usage']()
|
||||
else:
|
||||
used = self.module.params.get(option) is not None
|
||||
if used and 'default' in self.module.argument_spec[option]:
|
||||
used = self.module.params[option] != self.module.argument_spec[option]['default']
|
||||
if used:
|
||||
# If the option is used, compose error message.
|
||||
if 'usage_msg' in data:
|
||||
usg = data['usage_msg']
|
||||
else:
|
||||
usg = 'set %s option' % (option, )
|
||||
if not support_docker_api:
|
||||
msg = 'docker API version is %s. Minimum version required is %s to %s.'
|
||||
msg = msg % (self.docker_api_version_str, data['docker_api_version'], usg)
|
||||
elif not support_docker_py:
|
||||
if LooseVersion(data['docker_py_version']) < LooseVersion('2.0.0'):
|
||||
msg = ("docker-py version is %s. Minimum version required is %s to %s. "
|
||||
"Consider switching to the 'docker' package if you do not require Python 2.6 support.")
|
||||
elif self.docker_py_version < LooseVersion('2.0.0'):
|
||||
msg = ("docker-py version is %s. Minimum version required is %s to %s. "
|
||||
"You have to switch to the Python 'docker' package. First uninstall 'docker-py' before "
|
||||
"installing 'docker' to avoid a broken installation.")
|
||||
else:
|
||||
msg = "docker version is %s. Minimum version required is %s to %s."
|
||||
msg = msg % (docker_version, data['docker_py_version'], usg)
|
||||
else:
|
||||
# should not happen
|
||||
msg = 'Cannot %s with your configuration.' % (usg, )
|
||||
self.fail(msg)
|
||||
|
||||
stop_timeout_supported = self.docker_api_version >= LooseVersion('1.25')
|
||||
stop_timeout_needed_for_update = self.module.params.get("stop_timeout") is not None and self.module.params.get('state') != 'absent'
|
||||
if stop_timeout_supported:
|
||||
stop_timeout_supported = self.docker_py_version >= LooseVersion('2.1')
|
||||
if stop_timeout_needed_for_update and not stop_timeout_supported:
|
||||
# We warn (instead of fail) since in older versions, stop_timeout was not used
|
||||
# to update the container's configuration, but only when stopping a container.
|
||||
self.module.warn("docker or docker-py version is %s. Minimum version required is 2.1 to update "
|
||||
"the container's stop_timeout configuration. "
|
||||
"If you use the 'docker-py' module, you have to switch to the docker 'Python' package." % (docker_version,))
|
||||
else:
|
||||
if stop_timeout_needed_for_update and not stop_timeout_supported:
|
||||
# We warn (instead of fail) since in older versions, stop_timeout was not used
|
||||
# to update the container's configuration, but only when stopping a container.
|
||||
self.module.warn("docker API version is %s. Minimum version required is 1.25 to set or "
|
||||
"update the container's stop_timeout configuration." % (self.docker_api_version_str,))
|
||||
self.option_minimal_versions['stop_timeout']['supported'] = stop_timeout_supported
|
||||
|
||||
def __init__(self, **kwargs):
|
||||
super(AnsibleDockerClientContainer, self).__init__(**kwargs)
|
||||
self._get_minimal_versions()
|
||||
super(AnsibleDockerClientContainer, self).__init__(
|
||||
option_minimal_versions=option_minimal_versions,
|
||||
option_minimal_versions_ignore_params=self.__NON_CONTAINER_PROPERTY_OPTIONS,
|
||||
**kwargs
|
||||
)
|
||||
self._get_additional_minimal_versions()
|
||||
self._parse_comparisons()
|
||||
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue