Add healthcheck test_cli_compatible option

This commit is contained in:
x4rd0o1Vtx 2024-05-11 17:52:42 +02:00
parent 36c118d154
commit ab409fda11
5 changed files with 16 additions and 4 deletions

View File

@ -0,0 +1,2 @@
minor_changes:
- docker_container - adds ``healthcheck.test_cli_compatible`` to allow omit test option on containers without remove existing image test (https://github.com/ansible-collections/community.docker/pull/847).

View File

@ -935,6 +935,7 @@ OPTION_HEALTHCHECK = (
OptionGroup(preprocess=_preprocess_healthcheck)
.add_option('healthcheck', type='dict', ansible_suboptions=dict(
test=dict(type='raw'),
test_cli_compatible=dict(type='bool', default=False),
interval=dict(type='str'),
timeout=dict(type='str'),
start_period=dict(type='str'),

View File

@ -746,7 +746,7 @@ def _preprocess_etc_hosts(module, client, api_version, value):
def _preprocess_healthcheck(module, client, api_version, value):
if value is None:
return value
if not value or not value.get('test'):
if not value or not (value.get('test') or (value.get('test_cli_compatible') and value.get('test') is None)):
value = {'test': ['NONE']}
elif 'test' in value:
value['test'] = normalize_healthcheck_test(value['test'])

View File

@ -353,7 +353,7 @@ def normalize_healthcheck(healthcheck, normalize_test=False):
result = dict()
# All supported healthcheck parameters
options = ('test', 'interval', 'timeout', 'start_period', 'start_interval', 'retries')
options = ('test', 'test_cli_compatible', 'interval', 'timeout', 'start_period', 'start_interval', 'retries')
duration_options = ('interval', 'timeout', 'start_period', 'start_interval')
@ -366,7 +366,7 @@ def normalize_healthcheck(healthcheck, normalize_test=False):
continue
if key in duration_options:
value = convert_duration_to_nanosecond(value)
if not value:
if not value and not (healthcheck['test_cli_compatible'] and key == 'test'):
continue
if key == 'retries':
try:
@ -376,7 +376,7 @@ def normalize_healthcheck(healthcheck, normalize_test=False):
'Cannot parse number of retries for healthcheck. '
'Expected an integer, got "{0}".'.format(value)
)
if key == 'test' and normalize_test:
if key == 'test' and value and normalize_test:
value = normalize_healthcheck_test(value)
result[key] = value

View File

@ -379,6 +379,15 @@ options:
- Command to run to check health.
- Must be either a string or a list. If it is a list, the first item must be one of V(NONE), V(CMD) or V(CMD-SHELL).
type: raw
test_cli_compatible:
description:
- If set to V(true), omitting O(healthcheck.test) while providing O(healthcheck) does not disable healthchecks,
but simply overwrites the image's values by the ones specified in O(healthcheck). This is
the behavior used by the Docker CLI.
- If set to V(false), omitting O(healthcheck.test) will disable the container's health check.
This is the classical behavior of the module and currently the default behavior.
default: false
type: bool
interval:
description:
- Time between running the check.