docker_swarm_service: Fix endpoint mode idempotency (#51232)

* Fix endpoint mode idempotency

* Remove newline
pull/51371/head
Hannes Ljungberg 6 years ago committed by ansibot
parent 9f5a251e25
commit ee39853426

@ -117,11 +117,10 @@ options:
- Dictionary of key value pairs. - Dictionary of key value pairs.
- Maps docker service --container-label option. - Maps docker service --container-label option.
endpoint_mode: endpoint_mode:
required: false type: str
description: description:
- Service endpoint mode. - Service endpoint mode.
- Maps docker service --endpoint-mode option. - Maps docker service --endpoint-mode option.
default: vip
choices: choices:
- vip - vip
- dnsrr - dnsrr
@ -542,7 +541,7 @@ class DockerService(DockerBaseClass):
self.image = "" self.image = ""
self.command = None self.command = None
self.args = [] self.args = []
self.endpoint_mode = "vip" self.endpoint_mode = None
self.dns = [] self.dns = []
self.hostname = "" self.hostname = ""
self.tty = False self.tty = False
@ -755,7 +754,7 @@ class DockerService(DockerBaseClass):
differences = DifferenceTracker() differences = DifferenceTracker()
needs_rebuild = False needs_rebuild = False
force_update = False force_update = False
if self.endpoint_mode != os.endpoint_mode: if self.endpoint_mode is not None and self.endpoint_mode != os.endpoint_mode:
differences.add('endpoint_mode', parameter=self.endpoint_mode, active=os.endpoint_mode) differences.add('endpoint_mode', parameter=self.endpoint_mode, active=os.endpoint_mode)
if self.env != os.env: if self.env != os.env:
differences.add('env', parameter=self.env, active=os.env) differences.add('env', parameter=self.env, active=os.env)
@ -1072,11 +1071,9 @@ class DockerServiceManager():
ds.restart_policy_attempts = restart_policy_data.get('MaxAttempts') ds.restart_policy_attempts = restart_policy_data.get('MaxAttempts')
ds.restart_policy_window = restart_policy_data.get('Window') ds.restart_policy_window = restart_policy_data.get('Window')
raw_data_endpoint = raw_data.get('Endpoint', None) raw_data_endpoint_spec = raw_data['Spec'].get('EndpointSpec')
if raw_data_endpoint:
raw_data_endpoint_spec = raw_data_endpoint.get('Spec', None)
if raw_data_endpoint_spec: if raw_data_endpoint_spec:
ds.endpoint_mode = raw_data_endpoint_spec.get('Mode', 'vip') ds.endpoint_mode = raw_data_endpoint_spec.get('Mode')
for port in raw_data_endpoint_spec.get('Ports', []): for port in raw_data_endpoint_spec.get('Ports', []):
ds.publish.append({ ds.publish.append({
'protocol': port['Protocol'], 'protocol': port['Protocol'],
@ -1288,7 +1285,7 @@ def main():
container_labels=dict(default={}, type='dict'), container_labels=dict(default={}, type='dict'),
mode=dict(default="replicated"), mode=dict(default="replicated"),
replicas=dict(default=-1, type='int'), replicas=dict(default=-1, type='int'),
endpoint_mode=dict(default='vip', choices=['vip', 'dnsrr']), endpoint_mode=dict(default=None, choices=['vip', 'dnsrr']),
restart_policy=dict(default='none', choices=['none', 'on-failure', 'any']), restart_policy=dict(default='none', choices=['none', 'on-failure', 'any']),
limit_cpu=dict(default=0, type='float'), limit_cpu=dict(default=0, type='float'),
limit_memory=dict(default=0, type='str'), limit_memory=dict(default=0, type='str'),

@ -494,14 +494,6 @@
## endpoint_mode ################################################### ## endpoint_mode ###################################################
#################################################################### ####################################################################
# FIXME: endpoint_mode_2 is not marked as changed
#fatal: [testhost]: FAILED! => {
# "assertion": "endpoint_mode_2 is not changed",
# "changed": false,
# "evaluated_to": false,
# "msg": "Assertion failed"
#}
- name: endpoint_mode - name: endpoint_mode
docker_swarm_service: docker_swarm_service:
name: "{{ service_name }}" name: "{{ service_name }}"
@ -509,19 +501,19 @@
endpoint_mode: "dnsrr" endpoint_mode: "dnsrr"
register: endpoint_mode_1 register: endpoint_mode_1
#- name: endpoint_mode (idempotency) - name: endpoint_mode (idempotency)
# docker_swarm_service: docker_swarm_service:
# name: "{{ service_name }}" name: "{{ service_name }}"
# image: alpine:3.8 image: alpine:3.8
# endpoint_mode: "dnsrr" endpoint_mode: "dnsrr"
# register: endpoint_mode_2 register: endpoint_mode_2
#- name: endpoint_mode (changes) - name: endpoint_mode (changes)
# docker_swarm_service: docker_swarm_service:
# name: "{{ service_name }}" name: "{{ service_name }}"
# image: alpine:3.8 image: alpine:3.8
# endpoint_mode: "vip" endpoint_mode: "vip"
# register: endpoint_mode_3 register: endpoint_mode_3
- name: cleanup - name: cleanup
docker_swarm_service: docker_swarm_service:
@ -532,8 +524,8 @@
- assert: - assert:
that: that:
- endpoint_mode_1 is changed - endpoint_mode_1 is changed
# - endpoint_mode_2 is not changed - endpoint_mode_2 is not changed
# - endpoint_mode_3 is changed - endpoint_mode_3 is changed
#################################################################### ####################################################################
## env ############################################################# ## env #############################################################

Loading…
Cancel
Save