docker_swarm: add data_path_port option for swarm init (#466)

* Add data_path_port option for swarm init and swarm join

* Add changelog fragment

* Update changelogs/fragments/466-add-data-path-port.yml

Co-authored-by: Felix Fontein <felix@fontein.de>

* Update plugins/modules/docker_swarm.py

Co-authored-by: Felix Fontein <felix@fontein.de>

* add change for docker sdk, remove reference to swarm join

* remove duplicate entry

Co-authored-by: Felix Fontein <felix@fontein.de>
This commit is contained in:
Max 2022-09-03 05:20:02 -04:00 committed by GitHub
parent 1e24120014
commit c9ea1d3f92
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 22 additions and 1 deletions

View File

@ -0,0 +1,2 @@
minor_changes:
- docker_swarm - allows usage of the ``data_path_port`` parameter when initializing a swarm (https://github.com/ansible-collections/community.docker/issues/296).

View File

@ -185,6 +185,14 @@ options:
considered for idempotency checking. considered for idempotency checking.
type: str type: str
version_added: 2.5.0 version_added: 2.5.0
data_path_port:
description:
- Port to use for data path traffic.
- This needs to be a port number like C(9789).
- Only used when swarm is initialised. Because of this it is not
considered for idempotency checking.
type: int
version_added: 3.1.0
extends_documentation_fragment: extends_documentation_fragment:
- community.docker.docker - community.docker.docker
- community.docker.docker.docker_py_1_documentation - community.docker.docker.docker_py_1_documentation
@ -234,6 +242,11 @@ EXAMPLES = '''
state: present state: present
advertise_addr: eth0 advertise_addr: eth0
data_path_addr: ens10 data_path_addr: ens10
- name: Init a new swarm with a different data path port
community.docker.docker_swarm:
state: present
data_path_port: 9789
''' '''
RETURN = ''' RETURN = '''
@ -312,6 +325,7 @@ class TaskParameters(DockerBaseClass):
self.remote_addrs = None self.remote_addrs = None
self.join_token = None self.join_token = None
self.data_path_addr = None self.data_path_addr = None
self.data_path_port = None
# Spec # Spec
self.snapshot_interval = None self.snapshot_interval = None
@ -417,7 +431,8 @@ class TaskParameters(DockerBaseClass):
for k in self.__dict__: for k in self.__dict__:
if k in ('advertise_addr', 'listen_addr', 'remote_addrs', 'join_token', if k in ('advertise_addr', 'listen_addr', 'remote_addrs', 'join_token',
'rotate_worker_token', 'rotate_manager_token', 'spec', 'rotate_worker_token', 'rotate_manager_token', 'spec',
'default_addr_pool', 'subnet_size', 'data_path_addr'): 'default_addr_pool', 'subnet_size', 'data_path_addr',
'data_path_port'):
continue continue
if not client.option_minimal_versions[k]['supported']: if not client.option_minimal_versions[k]['supported']:
continue continue
@ -514,6 +529,8 @@ class SwarmManager(DockerBaseClass):
init_arguments['default_addr_pool'] = self.parameters.default_addr_pool init_arguments['default_addr_pool'] = self.parameters.default_addr_pool
if self.parameters.subnet_size is not None: if self.parameters.subnet_size is not None:
init_arguments['subnet_size'] = self.parameters.subnet_size init_arguments['subnet_size'] = self.parameters.subnet_size
if self.parameters.data_path_port is not None:
init_arguments['data_path_port'] = self.parameters.data_path_port
try: try:
self.client.init_swarm(**init_arguments) self.client.init_swarm(**init_arguments)
except APIError as exc: except APIError as exc:
@ -619,6 +636,7 @@ def main():
argument_spec = dict( argument_spec = dict(
advertise_addr=dict(type='str'), advertise_addr=dict(type='str'),
data_path_addr=dict(type='str'), data_path_addr=dict(type='str'),
data_path_port=dict(type='int'),
state=dict(type='str', default='present', choices=['present', 'join', 'absent', 'remove']), state=dict(type='str', default='present', choices=['present', 'join', 'absent', 'remove']),
force=dict(type='bool', default=False), force=dict(type='bool', default=False),
listen_addr=dict(type='str', default='0.0.0.0:2377'), listen_addr=dict(type='str', default='0.0.0.0:2377'),
@ -665,6 +683,7 @@ def main():
default_addr_pool=dict(docker_py_version='4.0.0', docker_api_version='1.39'), default_addr_pool=dict(docker_py_version='4.0.0', docker_api_version='1.39'),
subnet_size=dict(docker_py_version='4.0.0', docker_api_version='1.39'), subnet_size=dict(docker_py_version='4.0.0', docker_api_version='1.39'),
data_path_addr=dict(docker_py_version='4.0.0', docker_api_version='1.30'), data_path_addr=dict(docker_py_version='4.0.0', docker_api_version='1.30'),
data_path_port=dict(docker_py_version='6.0.0', docker_api_version='1.40'),
) )
client = AnsibleDockerSwarmClient( client = AnsibleDockerSwarmClient(