Skip to content

Commit

Permalink
Add healthcheck start-interval option
Browse files Browse the repository at this point in the history
  • Loading branch information
x4rd0o1Vtx committed May 8, 2024
1 parent 9beac01 commit 9c99104
Show file tree
Hide file tree
Showing 5 changed files with 32 additions and 4 deletions.
1 change: 1 addition & 0 deletions plugins/module_utils/module_container/base.py
Original file line number Diff line number Diff line change
Expand Up @@ -938,6 +938,7 @@ def _compare_platform(option, param_value, container_value):
interval=dict(type='str'),
timeout=dict(type='str'),
start_period=dict(type='str'),
start_interval=dict(type='str'),
retries=dict(type='int'),
))
)
Expand Down
1 change: 1 addition & 0 deletions plugins/module_utils/module_container/docker_api.py
Original file line number Diff line number Diff line change
Expand Up @@ -751,6 +751,7 @@ def _preprocess_healthcheck(module, client, api_version, value):
'Interval': value.get('interval'),
'Timeout': value.get('timeout'),
'StartPeriod': value.get('start_period'),
'StartInterval': value.get('start_interval'),
'Retries': value.get('retries'),
})

Expand Down
4 changes: 2 additions & 2 deletions plugins/module_utils/util.py
Original file line number Diff line number Diff line change
Expand Up @@ -348,9 +348,9 @@ def normalize_healthcheck(healthcheck, normalize_test=False):
result = dict()

# All supported healthcheck parameters
options = ('test', 'interval', 'timeout', 'start_period', 'retries')
options = ('test', 'interval', 'timeout', 'start_period', 'start_interval', 'retries')

duration_options = ('interval', 'timeout', 'start_period')
duration_options = ('interval', 'timeout', 'start_period', 'start_interval')

for key in options:
if key in healthcheck:
Expand Down
8 changes: 7 additions & 1 deletion plugins/modules/docker_container.py
Original file line number Diff line number Diff line change
Expand Up @@ -369,7 +369,7 @@
- Configure a check that is run to determine whether or not containers for this service are "healthy".
- "See the docs for the L(HEALTHCHECK Dockerfile instruction,https://docs.docker.com/engine/reference/builder/#healthcheck)
for details on how healthchecks work."
- "O(healthcheck.interval), O(healthcheck.timeout) and O(healthcheck.start_period) are specified as durations.
- "O(healthcheck.interval), O(healthcheck.timeout) O(healthcheck.start_period) and O(healthcheck.start_interval) are specified as durations.
They accept duration as a string in a format that look like: V(5h34m56s), V(1m30s), and so on.
The supported units are V(us), V(ms), V(s), V(m) and V(h)."
type: dict
Expand Down Expand Up @@ -399,6 +399,11 @@
- Start period for the container to initialize before starting health-retries countdown.
- The default used by the Docker daemon is V(0s).
type: str
start_interval:
description:
- Time between health checks during the start period. This option requires Docker Engine version 25.0 or later.
- The default used by the Docker daemon is V(5s).
type: str
hostname:
description:
- The container's hostname.
Expand Down Expand Up @@ -1196,6 +1201,7 @@
timeout: 10s
retries: 3
start_period: 30s
start_interval: 10s
- name: Remove healthcheck from container
community.docker.docker_container:
Expand Down
22 changes: 21 additions & 1 deletion plugins/modules/docker_swarm_service.py
Original file line number Diff line number Diff line change
Expand Up @@ -148,7 +148,7 @@
- Configure a check that is run to determine whether or not containers for this service are "healthy".
See the docs for the L(HEALTHCHECK Dockerfile instruction,https://docs.docker.com/engine/reference/builder/#healthcheck)
for details on how healthchecks work.
- "O(healthcheck.interval), O(healthcheck.timeout), and O(healthcheck.start_period) are specified as durations.
- "O(healthcheck.interval), O(healthcheck.timeout), O(healthcheck.start_period) and O(healthcheck.start_interval) are specified as durations.
They accept duration as a string in a format that look like: V(5h34m56s), V(1m30s), and so on.
The supported units are V(us), V(ms), V(s), V(m) and V(h)."
type: dict
Expand All @@ -174,6 +174,10 @@
description:
- Start period for the container to initialize before starting health-retries countdown.
type: str
start_interval:
description:
- Time between health checks during the start period. This option requires Docker Engine version 25.0 or later.
type: str
hostname:
description:
- Container hostname.
Expand Down Expand Up @@ -701,6 +705,7 @@
"interval": 90000000000,
"retries": 3,
"start_period": 30000000000,
"start_interval": 10000000000,
"test": [
"CMD",
"curl",
Expand Down Expand Up @@ -920,6 +925,7 @@
timeout: 10s
retries: 3
start_period: 30s
start_interval: 10s
- name: Configure service resources
community.docker.docker_swarm_service:
Expand Down Expand Up @@ -2185,6 +2191,7 @@ def get_service(self, name):
'Interval': 'interval',
'Timeout': 'timeout',
'StartPeriod': 'start_period',
'StartInterval': 'start_interval',
'Retries': 'retries'
}
healthcheck = dict(
Expand Down Expand Up @@ -2585,6 +2592,12 @@ def _detect_healthcheck_start_period(client):
return False


def _detect_healthcheck_start_interval(client):
if client.module.params['healthcheck']:
return client.module.params['healthcheck']['start_interval'] is not None
return False


def _detect_mount_tmpfs_usage(client):
for mount in client.module.params['mounts'] or []:
if mount.get('type') == 'tmpfs':
Expand Down Expand Up @@ -2684,6 +2697,7 @@ def main():
interval=dict(type='str'),
timeout=dict(type='str'),
start_period=dict(type='str'),
start_interval=dict(type='str'),
retries=dict(type='int'),
)),
hostname=dict(type='str'),
Expand Down Expand Up @@ -2779,6 +2793,12 @@ def main():
detect_usage=_detect_healthcheck_start_period,
usage_msg='set healthcheck.start_period'
),
healthcheck_start_interval=dict(
docker_py_version='2.6.0',
docker_api_version='1.29',
detect_usage=_detect_healthcheck_start_interval,
usage_msg='set healthcheck.start_interval'
),
update_config_max_failure_ratio=dict(
docker_py_version='2.1.0',
detect_usage=lambda c: (c.module.params['update_config'] or {}).get(
Expand Down

0 comments on commit 9c99104

Please sign in to comment.