mirror of
https://github.com/ansible-collections/community.docker.git
synced 2025-12-18 04:48:46 +00:00
docker_container: fail if there are too many parts in a parsed port (#367)
* Fail if there are too many parts in a parsed port. * Add tests. * Prevent bad parsing.
This commit is contained in:
parent
ab2d33aa99
commit
401a76ff00
@ -0,0 +1,2 @@
|
|||||||
|
bugfixes:
|
||||||
|
- "docker_container - fail with a meaningful message instead of crashing if a port is specified with more than three colon-separated parts (https://github.com/ansible-collections/community.docker/pull/367, https://github.com/ansible-collections/community.docker/issues/365)."
|
||||||
@ -1835,6 +1835,9 @@ class TaskParameters(DockerBaseClass):
|
|||||||
port_binds = [(ipaddr, port) for port in parse_port_range(parts[1], self.client)]
|
port_binds = [(ipaddr, port) for port in parse_port_range(parts[1], self.client)]
|
||||||
else:
|
else:
|
||||||
port_binds = len(container_ports) * [(ipaddr,)]
|
port_binds = len(container_ports) * [(ipaddr,)]
|
||||||
|
else:
|
||||||
|
self.fail(('Invalid port description "%s" - expected 1 to 3 colon-separated parts, but got %d. '
|
||||||
|
'Maybe you forgot to use square brackets ([...]) around an IPv6 address?') % (port, p_len))
|
||||||
|
|
||||||
for bind, container_port in zip(port_binds, container_ports):
|
for bind, container_port in zip(port_binds, container_ports):
|
||||||
idx = '{0}/{1}'.format(container_port, protocol) if protocol else container_port
|
idx = '{0}/{1}'.format(container_port, protocol) if protocol else container_port
|
||||||
|
|||||||
@ -7,6 +7,52 @@
|
|||||||
set_fact:
|
set_fact:
|
||||||
cnames: "{{ cnames + [cname, cname2] }}"
|
cnames: "{{ cnames + [cname, cname2] }}"
|
||||||
|
|
||||||
|
####################################################################
|
||||||
|
## published_ports: error handling #################################
|
||||||
|
####################################################################
|
||||||
|
|
||||||
|
- name: published_ports -- non-closing square bracket
|
||||||
|
docker_container:
|
||||||
|
image: "{{ docker_test_image_alpine }}"
|
||||||
|
command: '/bin/sh -c "sleep 10m"'
|
||||||
|
name: "{{ cname }}"
|
||||||
|
state: started
|
||||||
|
published_ports:
|
||||||
|
- "[::1:2000:3000"
|
||||||
|
register: published_ports_1
|
||||||
|
ignore_errors: true
|
||||||
|
|
||||||
|
- name: published_ports -- forgot square brackets for IPv6
|
||||||
|
docker_container:
|
||||||
|
image: "{{ docker_test_image_alpine }}"
|
||||||
|
command: '/bin/sh -c "sleep 10m"'
|
||||||
|
name: "{{ cname }}"
|
||||||
|
state: started
|
||||||
|
published_ports:
|
||||||
|
- "::1:2000:3000"
|
||||||
|
register: published_ports_2
|
||||||
|
ignore_errors: true
|
||||||
|
|
||||||
|
- name: published_ports -- disallow hostnames
|
||||||
|
docker_container:
|
||||||
|
image: "{{ docker_test_image_alpine }}"
|
||||||
|
command: '/bin/sh -c "sleep 10m"'
|
||||||
|
name: "{{ cname }}"
|
||||||
|
state: started
|
||||||
|
published_ports:
|
||||||
|
- "foo:2000:3000"
|
||||||
|
register: published_ports_3
|
||||||
|
ignore_errors: true
|
||||||
|
|
||||||
|
- assert:
|
||||||
|
that:
|
||||||
|
- published_ports_1 is failed
|
||||||
|
- published_ports_1.msg == 'Cannot find closing "]" in input "[::1:2000:3000" for opening "[" at index 1!'
|
||||||
|
- published_ports_2 is failed
|
||||||
|
- published_ports_2.msg == 'Invalid port description "::1:2000:3000" - expected 1 to 3 colon-separated parts, but got 5. Maybe you forgot to use square brackets ([...]) around an IPv6 address?'
|
||||||
|
- published_ports_3 is failed
|
||||||
|
- "published_ports_3.msg == 'Bind addresses for published ports must be IPv4 or IPv6 addresses, not hostnames. Use the dig lookup to resolve hostnames. (Found hostname: foo)'"
|
||||||
|
|
||||||
####################################################################
|
####################################################################
|
||||||
## published_ports: all ############################################
|
## published_ports: all ############################################
|
||||||
####################################################################
|
####################################################################
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user