docker_swarm_service: Add working_dir option (#52425)
* Add working_dir option * Check local mounts var to align with other checks * Add changelog fragment * Add trailing commapull/4420/head
parent
37b0f5c81b
commit
c80ad43371
|
@ -0,0 +1,2 @@
|
||||||
|
minor_changes:
|
||||||
|
- "docker_swarm_service - Added support for ``working_dir`` parameter."
|
|
@ -446,6 +446,12 @@ options:
|
||||||
- Before Ansible 2.8, the default value for this option was C(root).
|
- Before Ansible 2.8, the default value for this option was C(root).
|
||||||
- The default has been removed so that the user defined in the image is used if no user is specified here.
|
- The default has been removed so that the user defined in the image is used if no user is specified here.
|
||||||
- Corresponds to the C(--user) option of C(docker service create).
|
- Corresponds to the C(--user) option of C(docker service create).
|
||||||
|
working_dir:
|
||||||
|
type: str
|
||||||
|
description:
|
||||||
|
- Path to the working directory.
|
||||||
|
- Corresponds to the C(--workdir) option of C(docker service create).
|
||||||
|
version_added: "2.8"
|
||||||
extends_documentation_fragment:
|
extends_documentation_fragment:
|
||||||
- docker
|
- docker
|
||||||
- docker.docker_py_2_documentation
|
- docker.docker_py_2_documentation
|
||||||
|
@ -743,6 +749,7 @@ class DockerService(DockerBaseClass):
|
||||||
self.update_monitor = None
|
self.update_monitor = None
|
||||||
self.update_max_failure_ratio = None
|
self.update_max_failure_ratio = None
|
||||||
self.update_order = None
|
self.update_order = None
|
||||||
|
self.working_dir = None
|
||||||
|
|
||||||
def get_facts(self):
|
def get_facts(self):
|
||||||
return {
|
return {
|
||||||
|
@ -786,7 +793,8 @@ class DockerService(DockerBaseClass):
|
||||||
'update_failure_action': self.update_failure_action,
|
'update_failure_action': self.update_failure_action,
|
||||||
'update_monitor': self.update_monitor,
|
'update_monitor': self.update_monitor,
|
||||||
'update_max_failure_ratio': self.update_max_failure_ratio,
|
'update_max_failure_ratio': self.update_max_failure_ratio,
|
||||||
'update_order': self.update_order
|
'update_order': self.update_order,
|
||||||
|
'working_dir': self.working_dir,
|
||||||
}
|
}
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
|
@ -823,6 +831,7 @@ class DockerService(DockerBaseClass):
|
||||||
s.update_max_failure_ratio = ap['update_max_failure_ratio']
|
s.update_max_failure_ratio = ap['update_max_failure_ratio']
|
||||||
s.update_order = ap['update_order']
|
s.update_order = ap['update_order']
|
||||||
s.user = ap['user']
|
s.user = ap['user']
|
||||||
|
s.working_dir = ap['working_dir']
|
||||||
|
|
||||||
s.command = ap['command']
|
s.command = ap['command']
|
||||||
if isinstance(s.command, string_types):
|
if isinstance(s.command, string_types):
|
||||||
|
@ -1012,6 +1021,8 @@ class DockerService(DockerBaseClass):
|
||||||
differences.add('hostname', parameter=self.hostname, active=os.hostname)
|
differences.add('hostname', parameter=self.hostname, active=os.hostname)
|
||||||
if self.tty is not None and self.tty != os.tty:
|
if self.tty is not None and self.tty != os.tty:
|
||||||
differences.add('tty', parameter=self.tty, active=os.tty)
|
differences.add('tty', parameter=self.tty, active=os.tty)
|
||||||
|
if self.working_dir is not None and self.working_dir != os.working_dir:
|
||||||
|
differences.add('working_dir', parameter=self.working_dir, active=os.working_dir)
|
||||||
if self.force_update:
|
if self.force_update:
|
||||||
force_update = True
|
force_update = True
|
||||||
return not differences.empty or force_update, differences, needs_rebuild, force_update
|
return not differences.empty or force_update, differences, needs_rebuild, force_update
|
||||||
|
@ -1138,9 +1149,11 @@ class DockerService(DockerBaseClass):
|
||||||
container_spec_args['tty'] = self.tty
|
container_spec_args['tty'] = self.tty
|
||||||
if self.groups is not None:
|
if self.groups is not None:
|
||||||
container_spec_args['groups'] = self.groups
|
container_spec_args['groups'] = self.groups
|
||||||
|
if self.working_dir is not None:
|
||||||
|
container_spec_args['workdir'] = self.working_dir
|
||||||
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 mounts is not None:
|
||||||
container_spec_args['mounts'] = mounts
|
container_spec_args['mounts'] = mounts
|
||||||
if dns_config is not None:
|
if dns_config is not None:
|
||||||
container_spec_args['dns_config'] = dns_config
|
container_spec_args['dns_config'] = dns_config
|
||||||
|
@ -1328,6 +1341,7 @@ class DockerServiceManager(object):
|
||||||
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.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')
|
||||||
|
ds.working_dir = task_template_data['ContainerSpec'].get('Dir')
|
||||||
|
|
||||||
healthcheck_data = task_template_data['ContainerSpec'].get('Healthcheck')
|
healthcheck_data = task_template_data['ContainerSpec'].get('Healthcheck')
|
||||||
if healthcheck_data:
|
if healthcheck_data:
|
||||||
|
@ -1703,7 +1717,8 @@ def main():
|
||||||
update_monitor=dict(type='int'),
|
update_monitor=dict(type='int'),
|
||||||
update_max_failure_ratio=dict(type='float'),
|
update_max_failure_ratio=dict(type='float'),
|
||||||
update_order=dict(type='str'),
|
update_order=dict(type='str'),
|
||||||
user=dict(type='str')
|
user=dict(type='str'),
|
||||||
|
working_dir=dict(type='str'),
|
||||||
)
|
)
|
||||||
|
|
||||||
option_minimal_versions = dict(
|
option_minimal_versions = dict(
|
||||||
|
|
|
@ -2524,6 +2524,43 @@
|
||||||
- user_2 is not changed
|
- user_2 is not changed
|
||||||
- user_3 is changed
|
- user_3 is changed
|
||||||
|
|
||||||
|
####################################################################
|
||||||
|
## working_dir #####################################################
|
||||||
|
####################################################################
|
||||||
|
|
||||||
|
- name: working_dir
|
||||||
|
docker_swarm_service:
|
||||||
|
name: "{{ service_name }}"
|
||||||
|
image: alpine:3.8
|
||||||
|
working_dir: /tmp
|
||||||
|
register: working_dir_1
|
||||||
|
|
||||||
|
- name: working_dir (idempotency)
|
||||||
|
docker_swarm_service:
|
||||||
|
name: "{{ service_name }}"
|
||||||
|
image: alpine:3.8
|
||||||
|
working_dir: /tmp
|
||||||
|
register: working_dir_2
|
||||||
|
|
||||||
|
- name: working_dir (change)
|
||||||
|
docker_swarm_service:
|
||||||
|
name: "{{ service_name }}"
|
||||||
|
image: alpine:3.8
|
||||||
|
working_dir: /
|
||||||
|
register: working_dir_3
|
||||||
|
|
||||||
|
- name: cleanup
|
||||||
|
docker_swarm_service:
|
||||||
|
name: "{{ service_name }}"
|
||||||
|
state: absent
|
||||||
|
diff: no
|
||||||
|
|
||||||
|
- assert:
|
||||||
|
that:
|
||||||
|
- working_dir_1 is changed
|
||||||
|
- working_dir_2 is not changed
|
||||||
|
- working_dir_3 is changed
|
||||||
|
|
||||||
####################################################################
|
####################################################################
|
||||||
####################################################################
|
####################################################################
|
||||||
####################################################################
|
####################################################################
|
||||||
|
|
|
@ -44,3 +44,4 @@ service_expected_output:
|
||||||
update_monitor: null
|
update_monitor: null
|
||||||
update_order: null
|
update_order: null
|
||||||
update_parallelism: 1
|
update_parallelism: 1
|
||||||
|
working_dir: null
|
||||||
|
|
Loading…
Reference in New Issue