mirror of
https://github.com/ansible-collections/community.docker.git
synced 2026-09-12 19:07:24 +00:00
Rewrite docker_container to use Docker API directly (#422)
* Begin experiments for docker_container rewrite. * Continued. * We support API >= 1.25 only anyway. * Continued. * Fix bugs. * Complete first basic implementation. * Continuing. * Improvements and fixes. * Continuing. * More 'easy' options. * More options. * Work on volumes and mounts. * Add more options. * The last option. * Copy over. * Fix exposed ports. * Fix bugs. * Fix command and entrypoint. * More fixes. * Fix more bugs. * ci_complete * Lint, fix Python 2.7 bugs, work around ansible-test bug. ci_complete * Remove no longer applicable test. ci_complete * Remove unnecessary ignore. ci_complete * Start with engine driver. * Refactoring. * Avoid using anything Docker specific from self.client. * Refactor. * Add Python 2.6 ignore.txt entries for ansible-core < 2.12. * Improve healthcheck handling. * Fix container removal logic. * ci_complete * Remove handling of older Docker SDK for Pyhon versions from integration tests. * Avoid recreation if a pure update is possible without losing the diff data. * Cover the case that blkio_weight does not work. * Update plugins/module_utils/module_container/docker_api.py Co-authored-by: Brian Scholer <1260690+briantist@users.noreply.github.com> * Improve memory_swap tests. * Fix URLs in changelog fragment. Co-authored-by: Brian Scholer <1260690+briantist@users.noreply.github.com>
This commit is contained in:
@@ -331,6 +331,49 @@ def convert_duration_to_nanosecond(time_str):
|
||||
return time_in_nanoseconds
|
||||
|
||||
|
||||
def normalize_healthcheck_test(test):
|
||||
if isinstance(test, (tuple, list)):
|
||||
return [str(e) for e in test]
|
||||
return ['CMD-SHELL', str(test)]
|
||||
|
||||
|
||||
def normalize_healthcheck(healthcheck, normalize_test=False):
|
||||
"""
|
||||
Return dictionary of healthcheck parameters.
|
||||
"""
|
||||
result = dict()
|
||||
|
||||
# All supported healthcheck parameters
|
||||
options = ('test', 'interval', 'timeout', 'start_period', 'retries')
|
||||
|
||||
duration_options = ('interval', 'timeout', 'start_period')
|
||||
|
||||
for key in options:
|
||||
if key in healthcheck:
|
||||
value = healthcheck[key]
|
||||
if value is None:
|
||||
# due to recursive argument_spec, all keys are always present
|
||||
# (but have default value None if not specified)
|
||||
continue
|
||||
if key in duration_options:
|
||||
value = convert_duration_to_nanosecond(value)
|
||||
if not value:
|
||||
continue
|
||||
if key == 'retries':
|
||||
try:
|
||||
value = int(value)
|
||||
except ValueError:
|
||||
raise ValueError(
|
||||
'Cannot parse number of retries for healthcheck. '
|
||||
'Expected an integer, got "{0}".'.format(value)
|
||||
)
|
||||
if key == 'test' and normalize_test:
|
||||
value = normalize_healthcheck_test(value)
|
||||
result[key] = value
|
||||
|
||||
return result
|
||||
|
||||
|
||||
def parse_healthcheck(healthcheck):
|
||||
"""
|
||||
Return dictionary of healthcheck parameters and boolean if
|
||||
@@ -339,44 +382,7 @@ def parse_healthcheck(healthcheck):
|
||||
if (not healthcheck) or (not healthcheck.get('test')):
|
||||
return None, None
|
||||
|
||||
result = dict()
|
||||
|
||||
# All supported healthcheck parameters
|
||||
options = dict(
|
||||
test='test',
|
||||
interval='interval',
|
||||
timeout='timeout',
|
||||
start_period='start_period',
|
||||
retries='retries'
|
||||
)
|
||||
|
||||
duration_options = ['interval', 'timeout', 'start_period']
|
||||
|
||||
for (key, value) in options.items():
|
||||
if value in healthcheck:
|
||||
if healthcheck.get(value) is None:
|
||||
# due to recursive argument_spec, all keys are always present
|
||||
# (but have default value None if not specified)
|
||||
continue
|
||||
if value in duration_options:
|
||||
time = convert_duration_to_nanosecond(healthcheck.get(value))
|
||||
if time:
|
||||
result[key] = time
|
||||
elif healthcheck.get(value):
|
||||
result[key] = healthcheck.get(value)
|
||||
if key == 'test':
|
||||
if isinstance(result[key], (tuple, list)):
|
||||
result[key] = [str(e) for e in result[key]]
|
||||
else:
|
||||
result[key] = ['CMD-SHELL', str(result[key])]
|
||||
elif key == 'retries':
|
||||
try:
|
||||
result[key] = int(result[key])
|
||||
except ValueError:
|
||||
raise ValueError(
|
||||
'Cannot parse number of retries for healthcheck. '
|
||||
'Expected an integer, got "{0}".'.format(result[key])
|
||||
)
|
||||
result = normalize_healthcheck(healthcheck, normalize_test=True)
|
||||
|
||||
if result['test'] == ['NONE']:
|
||||
# If the user explicitly disables the healthcheck, return None
|
||||
|
||||
Reference in New Issue
Block a user