mirror of
https://github.com/ansible-collections/community.general.git
synced 2024-09-14 20:13:21 +02:00
docker_swarm_service: Add groups option (#52428)
* Add groups option * Add changelog fragment * Remove whitespace * Remove whitespace
This commit is contained in:
parent
bb0a69e084
commit
64b12d2c0d
4 changed files with 87 additions and 0 deletions
|
@ -0,0 +1,2 @@
|
||||||
|
minor_changes:
|
||||||
|
- "docker_swarm_service - Added support for ``groups`` parameter."
|
|
@ -135,6 +135,13 @@ options:
|
||||||
- Force update even if no changes require it.
|
- Force update even if no changes require it.
|
||||||
- Corresponds to the C(--force) option of C(docker service update).
|
- Corresponds to the C(--force) option of C(docker service update).
|
||||||
- Requires API version >= 1.25.
|
- Requires API version >= 1.25.
|
||||||
|
groups:
|
||||||
|
type: list
|
||||||
|
description:
|
||||||
|
- List of additional group names and/or IDs that the container process will run as.
|
||||||
|
- Corresponds to the C(--group) option of C(docker service update).
|
||||||
|
- Requires API version >= 1.25.
|
||||||
|
version_added: "2.8"
|
||||||
labels:
|
labels:
|
||||||
type: dict
|
type: dict
|
||||||
description:
|
description:
|
||||||
|
@ -704,6 +711,7 @@ class DockerService(DockerBaseClass):
|
||||||
self.dns_options = None
|
self.dns_options = None
|
||||||
self.env = None
|
self.env = None
|
||||||
self.force_update = None
|
self.force_update = None
|
||||||
|
self.groups = None
|
||||||
self.log_driver = None
|
self.log_driver = None
|
||||||
self.log_driver_options = None
|
self.log_driver_options = None
|
||||||
self.labels = None
|
self.labels = None
|
||||||
|
@ -753,6 +761,7 @@ class DockerService(DockerBaseClass):
|
||||||
'hostname': self.hostname,
|
'hostname': self.hostname,
|
||||||
'env': self.env,
|
'env': self.env,
|
||||||
'force_update': self.force_update,
|
'force_update': self.force_update,
|
||||||
|
'groups': self.groups,
|
||||||
'log_driver': self.log_driver,
|
'log_driver': self.log_driver,
|
||||||
'log_driver_options': self.log_driver_options,
|
'log_driver_options': self.log_driver_options,
|
||||||
'publish': self.publish,
|
'publish': self.publish,
|
||||||
|
@ -849,6 +858,11 @@ class DockerService(DockerBaseClass):
|
||||||
if ap['force_update']:
|
if ap['force_update']:
|
||||||
s.force_update = int(str(time.time()).replace('.', ''))
|
s.force_update = int(str(time.time()).replace('.', ''))
|
||||||
|
|
||||||
|
if ap['groups'] is not None:
|
||||||
|
# In case integers are passed as groups, we need to convert them to
|
||||||
|
# strings as docker internally treats them as strings.
|
||||||
|
s.groups = [str(g) for g in ap['groups']]
|
||||||
|
|
||||||
if ap['replicas'] == -1:
|
if ap['replicas'] == -1:
|
||||||
if old_service:
|
if old_service:
|
||||||
s.replicas = old_service.replicas
|
s.replicas = old_service.replicas
|
||||||
|
@ -943,6 +957,8 @@ class DockerService(DockerBaseClass):
|
||||||
differences.add('constraints', parameter=self.constraints, active=os.constraints)
|
differences.add('constraints', parameter=self.constraints, active=os.constraints)
|
||||||
if self.placement_preferences is not None and self.placement_preferences != (os.placement_preferences or []):
|
if self.placement_preferences is not None and self.placement_preferences != (os.placement_preferences or []):
|
||||||
differences.add('placement_preferences', parameter=self.placement_preferences, active=os.placement_preferences)
|
differences.add('placement_preferences', parameter=self.placement_preferences, active=os.placement_preferences)
|
||||||
|
if self.groups is not None and self.groups != (os.groups or []):
|
||||||
|
differences.add('groups', parameter=self.groups, active=os.groups)
|
||||||
if self.labels is not None and self.labels != (os.labels or {}):
|
if self.labels is not None and self.labels != (os.labels or {}):
|
||||||
differences.add('labels', parameter=self.labels, active=os.labels)
|
differences.add('labels', parameter=self.labels, active=os.labels)
|
||||||
if self.limit_cpu is not None and self.limit_cpu != os.limit_cpu:
|
if self.limit_cpu is not None and self.limit_cpu != os.limit_cpu:
|
||||||
|
@ -1120,6 +1136,8 @@ class DockerService(DockerBaseClass):
|
||||||
container_spec_args['stop_signal'] = self.stop_signal
|
container_spec_args['stop_signal'] = self.stop_signal
|
||||||
if self.tty is not None:
|
if self.tty is not None:
|
||||||
container_spec_args['tty'] = self.tty
|
container_spec_args['tty'] = self.tty
|
||||||
|
if self.groups is not None:
|
||||||
|
container_spec_args['groups'] = self.groups
|
||||||
if secrets is not None:
|
if secrets is not None:
|
||||||
container_spec_args['secrets'] = secrets
|
container_spec_args['secrets'] = secrets
|
||||||
if self.mounts is not None:
|
if self.mounts is not None:
|
||||||
|
@ -1308,6 +1326,7 @@ class DockerServiceManager(object):
|
||||||
ds.env = task_template_data['ContainerSpec'].get('Env')
|
ds.env = task_template_data['ContainerSpec'].get('Env')
|
||||||
ds.command = task_template_data['ContainerSpec'].get('Command')
|
ds.command = task_template_data['ContainerSpec'].get('Command')
|
||||||
ds.args = task_template_data['ContainerSpec'].get('Args')
|
ds.args = task_template_data['ContainerSpec'].get('Args')
|
||||||
|
ds.groups = task_template_data['ContainerSpec'].get('Groups')
|
||||||
ds.stop_signal = task_template_data['ContainerSpec'].get('StopSignal')
|
ds.stop_signal = task_template_data['ContainerSpec'].get('StopSignal')
|
||||||
|
|
||||||
healthcheck_data = task_template_data['ContainerSpec'].get('Healthcheck')
|
healthcheck_data = task_template_data['ContainerSpec'].get('Healthcheck')
|
||||||
|
@ -1640,6 +1659,7 @@ def main():
|
||||||
env=dict(type='raw'),
|
env=dict(type='raw'),
|
||||||
env_files=dict(type='list', elements='path'),
|
env_files=dict(type='list', elements='path'),
|
||||||
force_update=dict(default=False, type='bool'),
|
force_update=dict(default=False, type='bool'),
|
||||||
|
groups=dict(type='list', elements='str'),
|
||||||
log_driver=dict(type='str'),
|
log_driver=dict(type='str'),
|
||||||
log_driver_options=dict(type='dict'),
|
log_driver_options=dict(type='dict'),
|
||||||
publish=dict(type='list', elements='dict', options=dict(
|
publish=dict(type='list', elements='dict', options=dict(
|
||||||
|
@ -1694,6 +1714,7 @@ def main():
|
||||||
force_update=dict(docker_py_version='2.1.0', docker_api_version='1.25'),
|
force_update=dict(docker_py_version='2.1.0', docker_api_version='1.25'),
|
||||||
healthcheck=dict(docker_py_version='2.0.0', docker_api_version='1.25'),
|
healthcheck=dict(docker_py_version='2.0.0', docker_api_version='1.25'),
|
||||||
hostname=dict(docker_py_version='2.2.0', docker_api_version='1.25'),
|
hostname=dict(docker_py_version='2.2.0', docker_api_version='1.25'),
|
||||||
|
groups=dict(docker_py_version='2.6.0', docker_api_version='1.25'),
|
||||||
tty=dict(docker_py_version='2.4.0', docker_api_version='1.25'),
|
tty=dict(docker_py_version='2.4.0', docker_api_version='1.25'),
|
||||||
secrets=dict(docker_py_version='2.1.0', docker_api_version='1.25'),
|
secrets=dict(docker_py_version='2.1.0', docker_api_version='1.25'),
|
||||||
configs=dict(docker_py_version='2.6.0', docker_api_version='1.30'),
|
configs=dict(docker_py_version='2.6.0', docker_api_version='1.30'),
|
||||||
|
|
|
@ -889,6 +889,69 @@
|
||||||
- "('version is ' ~ docker_api_version ~'. Minimum version required is 1.25') in force_update_1.msg"
|
- "('version is ' ~ docker_api_version ~'. Minimum version required is 1.25') in force_update_1.msg"
|
||||||
when: docker_api_version is version('1.25', '<')
|
when: docker_api_version is version('1.25', '<')
|
||||||
|
|
||||||
|
####################################################################
|
||||||
|
## groups ##########################################################
|
||||||
|
####################################################################
|
||||||
|
|
||||||
|
- name: groups
|
||||||
|
docker_swarm_service:
|
||||||
|
name: "{{ service_name }}"
|
||||||
|
image: alpine:3.8
|
||||||
|
command: '/bin/sh -v -c "sleep 10m"'
|
||||||
|
groups:
|
||||||
|
- 1234
|
||||||
|
- 5678
|
||||||
|
register: groups_1
|
||||||
|
|
||||||
|
- name: groups (idempotency)
|
||||||
|
docker_swarm_service:
|
||||||
|
name: "{{ service_name }}"
|
||||||
|
image: alpine:3.8
|
||||||
|
command: '/bin/sh -v -c "sleep 10m"'
|
||||||
|
groups:
|
||||||
|
- 1234
|
||||||
|
- 5678
|
||||||
|
register: groups_2
|
||||||
|
|
||||||
|
- name: groups (change)
|
||||||
|
docker_swarm_service:
|
||||||
|
name: "{{ service_name }}"
|
||||||
|
image: alpine:3.8
|
||||||
|
command: '/bin/sh -v -c "sleep 10m"'
|
||||||
|
groups:
|
||||||
|
- 1234
|
||||||
|
register: groups_3
|
||||||
|
|
||||||
|
- name: groups (empty)
|
||||||
|
docker_swarm_service:
|
||||||
|
name: "{{ service_name }}"
|
||||||
|
image: alpine:3.8
|
||||||
|
command: '/bin/sh -v -c "sleep 10m"'
|
||||||
|
groups: []
|
||||||
|
register: groups_4
|
||||||
|
|
||||||
|
- name: groups (empty idempotency)
|
||||||
|
docker_swarm_service:
|
||||||
|
name: "{{ service_name }}"
|
||||||
|
image: alpine:3.8
|
||||||
|
command: '/bin/sh -v -c "sleep 10m"'
|
||||||
|
groups: []
|
||||||
|
register: groups_5
|
||||||
|
|
||||||
|
- name: cleanup
|
||||||
|
docker_swarm_service:
|
||||||
|
name: "{{ service_name }}"
|
||||||
|
state: absent
|
||||||
|
diff: no
|
||||||
|
|
||||||
|
- assert:
|
||||||
|
that:
|
||||||
|
- groups_1 is changed
|
||||||
|
- groups_2 is not changed
|
||||||
|
- groups_3 is changed
|
||||||
|
- groups_4 is changed
|
||||||
|
- groups_5 is not changed
|
||||||
|
|
||||||
####################################################################
|
####################################################################
|
||||||
## healthcheck #####################################################
|
## healthcheck #####################################################
|
||||||
####################################################################
|
####################################################################
|
||||||
|
|
|
@ -12,6 +12,7 @@ service_expected_output:
|
||||||
endpoint_mode: vip
|
endpoint_mode: vip
|
||||||
env: null
|
env: null
|
||||||
force_update: null
|
force_update: null
|
||||||
|
groups: null
|
||||||
healthcheck: null
|
healthcheck: null
|
||||||
healthcheck_disabled: null
|
healthcheck_disabled: null
|
||||||
hostname: null
|
hostname: null
|
||||||
|
|
Loading…
Reference in a new issue