Do not pass data_path_addr for older Docker SDK for Python versions. (#696)

This commit is contained in:
Felix Fontein 2023-10-14 23:48:46 +02:00 committed by GitHub
parent 33c0957292
commit fbc2750b6a
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 16 additions and 5 deletions

View File

@ -0,0 +1,3 @@
bugfixes:
- "docker_swarm - make init and join operations work again with Docker SDK for Python before 4.0.0
(https://github.com/ansible-collections/community.docker/issues/695, https://github.com/ansible-collections/community.docker/pull/696)."

View File

@ -199,6 +199,7 @@ options:
like V(eth0). like V(eth0).
- Only used when swarm is initialised or joined. Because of this it is not - Only used when swarm is initialised or joined. Because of this it is not
considered for idempotency checking. considered for idempotency checking.
- Requires API version >= 1.30.
type: str type: str
version_added: 2.5.0 version_added: 2.5.0
data_path_port: data_path_port:
@ -207,6 +208,7 @@ options:
- This needs to be a port number like V(9789). - This needs to be a port number like V(9789).
- Only used when swarm is initialised. Because of this it is not - Only used when swarm is initialised. Because of this it is not
considered for idempotency checking. considered for idempotency checking.
- Requires API version >= 1.40.
type: int type: int
version_added: 3.1.0 version_added: 3.1.0
@ -534,7 +536,6 @@ class SwarmManager(DockerBaseClass):
init_arguments = { init_arguments = {
'advertise_addr': self.parameters.advertise_addr, 'advertise_addr': self.parameters.advertise_addr,
'listen_addr': self.parameters.listen_addr, 'listen_addr': self.parameters.listen_addr,
'data_path_addr': self.parameters.data_path_addr,
'force_new_cluster': self.force, 'force_new_cluster': self.force,
'swarm_spec': self.parameters.spec, 'swarm_spec': self.parameters.spec,
} }
@ -542,6 +543,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_addr is not None:
init_arguments['data_path_addr'] = self.parameters.data_path_addr
if self.parameters.data_path_port is not None: if self.parameters.data_path_port is not None:
init_arguments['data_path_port'] = self.parameters.data_path_port init_arguments['data_path_port'] = self.parameters.data_path_port
try: try:
@ -595,11 +598,16 @@ class SwarmManager(DockerBaseClass):
self.results['actions'].append("This node is already part of a swarm.") self.results['actions'].append("This node is already part of a swarm.")
return return
if not self.check_mode: if not self.check_mode:
join_arguments = {
'remote_addrs': self.parameters.remote_addrs,
'join_token': self.parameters.join_token,
'listen_addr': self.parameters.listen_addr,
'advertise_addr': self.parameters.advertise_addr,
}
if self.parameters.data_path_addr is not None:
join_arguments['data_path_addr'] = self.parameters.data_path_addr
try: try:
self.client.join_swarm( self.client.join_swarm(**join_arguments)
remote_addrs=self.parameters.remote_addrs, join_token=self.parameters.join_token,
listen_addr=self.parameters.listen_addr, advertise_addr=self.parameters.advertise_addr,
data_path_addr=self.parameters.data_path_addr)
except APIError as exc: except APIError as exc:
self.client.fail("Can not join the Swarm Cluster: %s" % to_native(exc)) self.client.fail("Can not join the Swarm Cluster: %s" % to_native(exc))
self.results['actions'].append("New node is added to swarm cluster") self.results['actions'].append("New node is added to swarm cluster")