Fix IPv6 zone handling (#66)

* Support IPv6 zones (RFC 4007).

* Add changelog fragment.

* Remove change for docker_network.

* Add IPv6 zone test.

It looks like an arbitrary zone name works. If Docker daemon ever starts
validating it (against what?) we either have to try to fix this test by
a valid value, or remove it again.
This commit is contained in:
Felix Fontein 2021-01-25 15:16:35 +01:00 committed by GitHub
parent 9a1018f479
commit c1e6c2e699
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 25 additions and 9 deletions

View File

@ -0,0 +1,2 @@
bugfixes:
- "docker_container - allow IPv6 zones (RFC 4007) in bind IPs (https://github.com/ansible-collections/community.docker/pull/66)."

View File

@ -1756,7 +1756,7 @@ class TaskParameters(DockerBaseClass):
elif p_len == 3: elif p_len == 3:
# We only allow IPv4 and IPv6 addresses for the bind address # We only allow IPv4 and IPv6 addresses for the bind address
ipaddr = parts[0] ipaddr = parts[0]
if not re.match(r'^[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+$', parts[0]) and not re.match(r'^\[[0-9a-fA-F:]+\]$', ipaddr): if not re.match(r'^[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+$', parts[0]) and not re.match(r'^\[[0-9a-fA-F:]+(?:|%[^\]/]+)\]$', ipaddr):
self.fail(('Bind addresses for published ports must be IPv4 or IPv6 addresses, not hostnames. ' self.fail(('Bind addresses for published ports must be IPv4 or IPv6 addresses, not hostnames. '
'Use the dig lookup to resolve hostnames. (Found hostname: {0})').format(ipaddr)) 'Use the dig lookup to resolve hostnames. (Found hostname: {0})').format(ipaddr))
if re.match(r'^\[[0-9a-fA-F:]+\]$', ipaddr): if re.match(r'^\[[0-9a-fA-F:]+\]$', ipaddr):

View File

@ -2950,9 +2950,22 @@ avoid such warnings, please quote the value.' in log_options_2.warnings"
published_ports: published_ports:
- '127.0.0.1:9002:9002/tcp' - '127.0.0.1:9002:9002/tcp'
- '[::1]:9003:9003/tcp' - '[::1]:9003:9003/tcp'
- '[fe80::1%test]:90:90/tcp'
force_kill: yes force_kill: yes
register: published_ports_5 register: published_ports_5
- name: published_ports (ports with IP addresses, idempotent)
docker_container:
image: "{{ docker_test_image_alpine }}"
command: '/bin/sh -c "sleep 10m"'
name: "{{ cname }}"
state: started
published_ports:
- '127.0.0.1:9002:9002/tcp'
- '[::1]:9003:9003/tcp'
- '[fe80::1%test]:90:90/tcp'
register: published_ports_6
- name: published_ports (no published ports) - name: published_ports (no published ports)
docker_container: docker_container:
image: "{{ docker_test_image_alpine }}" image: "{{ docker_test_image_alpine }}"
@ -2963,7 +2976,7 @@ avoid such warnings, please quote the value.' in log_options_2.warnings"
comparisons: comparisons:
published_ports: strict published_ports: strict
force_kill: yes force_kill: yes
register: published_ports_6 register: published_ports_7
- name: published_ports (default_host_ip not set) - name: published_ports (default_host_ip not set)
docker_container: docker_container:
@ -2975,7 +2988,7 @@ avoid such warnings, please quote the value.' in log_options_2.warnings"
- '9001' - '9001'
- '9002' - '9002'
force_kill: yes force_kill: yes
register: published_ports_7 register: published_ports_8
- name: published_ports (default_host_ip set to empty string) - name: published_ports (default_host_ip set to empty string)
docker_container: docker_container:
@ -2988,7 +3001,7 @@ avoid such warnings, please quote the value.' in log_options_2.warnings"
- '9001' - '9001'
default_host_ip: '' default_host_ip: ''
force_kill: yes force_kill: yes
register: published_ports_8 register: published_ports_9
- name: published_ports (default_host_ip set to empty string, idempotent) - name: published_ports (default_host_ip set to empty string, idempotent)
docker_container: docker_container:
@ -3000,7 +3013,7 @@ avoid such warnings, please quote the value.' in log_options_2.warnings"
- '9002' - '9002'
- '9001' - '9001'
default_host_ip: '' default_host_ip: ''
register: published_ports_9 register: published_ports_10
- name: published_ports (default_host_ip unset) - name: published_ports (default_host_ip unset)
docker_container: docker_container:
@ -3012,7 +3025,7 @@ avoid such warnings, please quote the value.' in log_options_2.warnings"
- '9002' - '9002'
- '9001' - '9001'
force_kill: yes force_kill: yes
register: published_ports_10 register: published_ports_11
- name: cleanup - name: cleanup
docker_container: docker_container:
@ -3028,11 +3041,12 @@ avoid such warnings, please quote the value.' in log_options_2.warnings"
- published_ports_3 is not changed - published_ports_3 is not changed
- published_ports_4 is changed - published_ports_4 is changed
- published_ports_5 is changed - published_ports_5 is changed
- published_ports_6 is changed - published_ports_6 is not changed
- published_ports_7 is changed - published_ports_7 is changed
- published_ports_8 is changed - published_ports_8 is changed
- published_ports_9 is not changed - published_ports_9 is changed
- published_ports_10 is changed - published_ports_10 is not changed
- published_ports_11 is changed
#################################################################### ####################################################################
## pull ############################################################ ## pull ############################################################