clarify port.mode paramter requiremets, fail if unmet (#47938)

* clarify port.mode paramter requiremets, fail if unmet

* changelog fragment

* shorten too long line

* remove unnecessary indentation

* test version on docker_version for better maintainability

* normalize imports

* changelog fragment: minor_changes -> bugfixes

* rollback e96a7e57dfefd566fa47cf465a759637affd4795

* typo

Co-Authored-By: dariko <dariko@users.noreply.github.com>
pull/4420/head
Dario Zanzico 2018-11-12 12:36:02 +01:00 committed by John R Barker
parent 0206a46e1d
commit 89bcd3ff1e
2 changed files with 9 additions and 5 deletions

View File

@ -0,0 +1,2 @@
bugfixes:
- "docker_swarm_service - The ``publish``.``mode`` parameter was being ignored if docker-py version was < 3.0.0. Added a parameter validation test."

View File

@ -191,7 +191,7 @@ options:
- List of dictionaries describing the service published ports. - List of dictionaries describing the service published ports.
- Every item must be a dictionary exposing the keys published_port, target_port, protocol (defaults to 'tcp') - Every item must be a dictionary exposing the keys published_port, target_port, protocol (defaults to 'tcp')
- Only used with api_version >= 1.25 - Only used with api_version >= 1.25
- If api_version >= 1.32 the dictionaries can contain the attribute 'mode' set to 'ingress' or 'host' (default 'ingress'). - If api_version >= 1.32 and docker python library >= 3.0.0 attribute 'mode' can be set to 'ingress' or 'host' (default 'ingress').
replicas: replicas:
required: false required: false
default: -1 default: -1
@ -457,6 +457,7 @@ EXAMPLES = '''
import time import time
from ansible.module_utils.docker_common import DockerBaseClass from ansible.module_utils.docker_common import DockerBaseClass
from ansible.module_utils.docker_common import AnsibleDockerClient from ansible.module_utils.docker_common import AnsibleDockerClient
from ansible.module_utils.docker_common import docker_version
from ansible.module_utils.basic import human_to_bytes from ansible.module_utils.basic import human_to_bytes
from ansible.module_utils._text import to_text from ansible.module_utils._text import to_text
@ -1041,10 +1042,11 @@ class DockerServiceManager():
% (pv['param'], pv['min_version']))) % (pv['param'], pv['min_version'])))
for publish_def in self.client.module.params.get('publish', []): for publish_def in self.client.module.params.get('publish', []):
if ('mode' in publish_def.keys() and if 'mode' in publish_def.keys():
(LooseVersion(self.client.version()['ApiVersion']) < if LooseVersion(self.client.version()['ApiVersion']) < LooseVersion('1.25'):
LooseVersion('1.25'))):
self.client.module.fail_json(msg='publish.mode parameter supported only with api_version>=1.25') self.client.module.fail_json(msg='publish.mode parameter supported only with api_version>=1.25')
if LooseVersion(docker_version) < LooseVersion('3.0.0'):
self.client.module.fail_json(msg='publish.mode parameter requires docker python library>=3.0.0')
def run(self): def run(self):
self.test_parameter_versions() self.test_parameter_versions()