docker_container: improve publish all ports functionality (#46594)
* Improve handling of published_ports: all. * Add changelog.
This commit is contained in:
parent
d69700b236
commit
8afe46dc02
3 changed files with 101 additions and 2 deletions
|
@ -0,0 +1,2 @@
|
||||||
|
bugfixes:
|
||||||
|
- "docker_container - ``publish_ports: all`` was not used correctly when checking idempotency."
|
|
@ -302,7 +302,7 @@ options:
|
||||||
- "Use docker CLI syntax: C(8000), C(9000:8000), or C(0.0.0.0:9000:8000), where 8000 is a
|
- "Use docker CLI syntax: C(8000), C(9000:8000), or C(0.0.0.0:9000:8000), where 8000 is a
|
||||||
container port, 9000 is a host port, and 0.0.0.0 is a host interface."
|
container port, 9000 is a host port, and 0.0.0.0 is a host interface."
|
||||||
- Container ports must be exposed either in the Dockerfile or via the C(expose) option.
|
- Container ports must be exposed either in the Dockerfile or via the C(expose) option.
|
||||||
- A value of all will publish all exposed container ports to random host ports, ignoring
|
- A value of C(all) will publish all exposed container ports to random host ports, ignoring
|
||||||
any other mappings.
|
any other mappings.
|
||||||
- If C(networks) parameter is provided, will inspect each network to see if there exists
|
- If C(networks) parameter is provided, will inspect each network to see if there exists
|
||||||
a bridge network with optional parameter com.docker.network.bridge.host_binding_ipv4.
|
a bridge network with optional parameter com.docker.network.bridge.host_binding_ipv4.
|
||||||
|
@ -1500,7 +1500,8 @@ class Container(DockerBaseClass):
|
||||||
expected_volumes=config.get('Volumes'),
|
expected_volumes=config.get('Volumes'),
|
||||||
expected_binds=host_config.get('Binds'),
|
expected_binds=host_config.get('Binds'),
|
||||||
volumes_from=host_config.get('VolumesFrom'),
|
volumes_from=host_config.get('VolumesFrom'),
|
||||||
working_dir=config.get('WorkingDir')
|
working_dir=config.get('WorkingDir'),
|
||||||
|
publish_all_ports=host_config.get('PublishAllPorts'),
|
||||||
)
|
)
|
||||||
if self.parameters.restart_policy:
|
if self.parameters.restart_policy:
|
||||||
config_mapping['restart_retries'] = restart_policy.get('MaximumRetryCount')
|
config_mapping['restart_retries'] = restart_policy.get('MaximumRetryCount')
|
||||||
|
@ -2291,6 +2292,8 @@ class AnsibleDockerClientContainer(AnsibleDockerClient):
|
||||||
comparisons[key_main]['comparison'] = value
|
comparisons[key_main]['comparison'] = value
|
||||||
else:
|
else:
|
||||||
self.fail("Unknown comparison mode '%s'!" % value)
|
self.fail("Unknown comparison mode '%s'!" % value)
|
||||||
|
# Add implicit options
|
||||||
|
comparisons['publish_all_ports'] = dict(type='value', comparison='strict', name='published_ports')
|
||||||
# Check legacy values
|
# Check legacy values
|
||||||
if self.module.params['ignore_image'] and comparisons['image']['comparison'] != 'ignore':
|
if self.module.params['ignore_image'] and comparisons['image']['comparison'] != 'ignore':
|
||||||
self.module.warn('The ignore_image option has been overridden by the comparisons option!')
|
self.module.warn('The ignore_image option has been overridden by the comparisons option!')
|
||||||
|
|
|
@ -0,0 +1,94 @@
|
||||||
|
---
|
||||||
|
- name: Registering container name
|
||||||
|
set_fact:
|
||||||
|
cname: "{{ cname_prefix ~ '-options' }}"
|
||||||
|
|
||||||
|
####################################################################
|
||||||
|
## published_ports: all ############################################
|
||||||
|
####################################################################
|
||||||
|
|
||||||
|
- name: published_ports -- all
|
||||||
|
docker_container:
|
||||||
|
image: alpine:3.8
|
||||||
|
command: '/bin/sh -c "sleep 10m"'
|
||||||
|
name: "{{ cname }}"
|
||||||
|
state: started
|
||||||
|
exposed_ports:
|
||||||
|
- 8080
|
||||||
|
- 8081
|
||||||
|
published_ports:
|
||||||
|
- all
|
||||||
|
stop_timeout: 1
|
||||||
|
register: published_ports_1
|
||||||
|
|
||||||
|
- name: published_ports -- all (idempotency)
|
||||||
|
docker_container:
|
||||||
|
image: alpine:3.8
|
||||||
|
command: '/bin/sh -c "sleep 10m"'
|
||||||
|
name: "{{ cname }}"
|
||||||
|
state: started
|
||||||
|
exposed_ports:
|
||||||
|
- 8080
|
||||||
|
- 8081
|
||||||
|
published_ports:
|
||||||
|
- all
|
||||||
|
stop_timeout: 1
|
||||||
|
register: published_ports_2
|
||||||
|
|
||||||
|
- name: published_ports -- all (writing out 'all')
|
||||||
|
docker_container:
|
||||||
|
image: alpine:3.8
|
||||||
|
command: '/bin/sh -c "sleep 10m"'
|
||||||
|
name: "{{ cname }}"
|
||||||
|
state: started
|
||||||
|
exposed_ports:
|
||||||
|
- 8080
|
||||||
|
- 8081
|
||||||
|
published_ports:
|
||||||
|
- 8080
|
||||||
|
- 8081
|
||||||
|
stop_timeout: 1
|
||||||
|
register: published_ports_3
|
||||||
|
|
||||||
|
- name: published_ports -- all (idempotency 2)
|
||||||
|
docker_container:
|
||||||
|
image: alpine:3.8
|
||||||
|
command: '/bin/sh -c "sleep 10m"'
|
||||||
|
name: "{{ cname }}"
|
||||||
|
state: started
|
||||||
|
exposed_ports:
|
||||||
|
- 8080
|
||||||
|
- 8081
|
||||||
|
published_ports:
|
||||||
|
- 8080
|
||||||
|
- 8081
|
||||||
|
stop_timeout: 1
|
||||||
|
register: published_ports_4
|
||||||
|
|
||||||
|
- name: published_ports -- all (switching back to 'all')
|
||||||
|
docker_container:
|
||||||
|
image: alpine:3.8
|
||||||
|
command: '/bin/sh -c "sleep 10m"'
|
||||||
|
name: "{{ cname }}"
|
||||||
|
state: started
|
||||||
|
exposed_ports:
|
||||||
|
- 8080
|
||||||
|
- 8081
|
||||||
|
published_ports:
|
||||||
|
- all
|
||||||
|
stop_timeout: 1
|
||||||
|
register: published_ports_5
|
||||||
|
|
||||||
|
- name: cleanup
|
||||||
|
docker_container:
|
||||||
|
name: "{{ cname }}"
|
||||||
|
state: absent
|
||||||
|
stop_timeout: 1
|
||||||
|
|
||||||
|
- assert:
|
||||||
|
that:
|
||||||
|
- published_ports_1 is changed
|
||||||
|
- published_ports_2 is not changed
|
||||||
|
- published_ports_3 is changed
|
||||||
|
- published_ports_4 is not changed
|
||||||
|
- published_ports_5 is changed
|
Loading…
Reference in a new issue