Adding "internal" option to "docker_network" module (#35370)
Fixes #27065
This commit is contained in:
parent
8ef994fbc5
commit
29b4b36501
3 changed files with 71 additions and 3 deletions
|
@ -0,0 +1,4 @@
|
||||||
|
---
|
||||||
|
minor_changes:
|
||||||
|
- "docker_network - ``internal`` is now used to set the ``Internal`` property of the docker network during creation."
|
||||||
|
- "docker_network - Minimum docker-py version increased from ``1.8.0`` to ``1.9.0``."
|
|
@ -86,16 +86,25 @@ options:
|
||||||
- absent
|
- absent
|
||||||
- present
|
- present
|
||||||
|
|
||||||
|
internal:
|
||||||
|
version_added: 2.8
|
||||||
|
description:
|
||||||
|
- Restrict external access to the network.
|
||||||
|
type: bool
|
||||||
|
default: null
|
||||||
|
required: false
|
||||||
|
|
||||||
extends_documentation_fragment:
|
extends_documentation_fragment:
|
||||||
- docker
|
- docker
|
||||||
|
|
||||||
author:
|
author:
|
||||||
- "Ben Keith (@keitwb)"
|
- "Ben Keith (@keitwb)"
|
||||||
- "Chris Houseknecht (@chouseknecht)"
|
- "Chris Houseknecht (@chouseknecht)"
|
||||||
|
- "Dave Bendit (@DBendit)"
|
||||||
|
|
||||||
requirements:
|
requirements:
|
||||||
- "python >= 2.6"
|
- "python >= 2.6"
|
||||||
- "docker-py >= 1.8.0"
|
- "docker-py >= 1.9.0"
|
||||||
- "Please note that the L(docker-py,https://pypi.org/project/docker-py/) Python
|
- "Please note that the L(docker-py,https://pypi.org/project/docker-py/) Python
|
||||||
module has been superseded by L(docker,https://pypi.org/project/docker/)
|
module has been superseded by L(docker,https://pypi.org/project/docker/)
|
||||||
(see L(here,https://github.com/docker/docker-py/issues/1310) for details).
|
(see L(here,https://github.com/docker/docker-py/issues/1310) for details).
|
||||||
|
@ -182,6 +191,7 @@ class TaskParameters(DockerBaseClass):
|
||||||
self.ipam_options = None
|
self.ipam_options = None
|
||||||
self.appends = None
|
self.appends = None
|
||||||
self.force = None
|
self.force = None
|
||||||
|
self.internal = None
|
||||||
self.debug = None
|
self.debug = None
|
||||||
|
|
||||||
for key, value in client.module.params.items():
|
for key, value in client.module.params.items():
|
||||||
|
@ -266,6 +276,15 @@ class DockerNetworkManager(object):
|
||||||
# key has different value
|
# key has different value
|
||||||
different = True
|
different = True
|
||||||
differences.append('ipam_options.%s' % key)
|
differences.append('ipam_options.%s' % key)
|
||||||
|
if self.parameters.internal is not None:
|
||||||
|
if self.parameters.internal:
|
||||||
|
if not net.get('Internal'):
|
||||||
|
different = True
|
||||||
|
differences.append('internal')
|
||||||
|
else:
|
||||||
|
if net.get('Internal'):
|
||||||
|
different = True
|
||||||
|
differences.append('internal')
|
||||||
return different, differences
|
return different, differences
|
||||||
|
|
||||||
def create_network(self):
|
def create_network(self):
|
||||||
|
@ -288,7 +307,8 @@ class DockerNetworkManager(object):
|
||||||
resp = self.client.create_network(self.parameters.network_name,
|
resp = self.client.create_network(self.parameters.network_name,
|
||||||
driver=self.parameters.driver,
|
driver=self.parameters.driver,
|
||||||
options=self.parameters.driver_options,
|
options=self.parameters.driver_options,
|
||||||
ipam=ipam_config)
|
ipam=ipam_config,
|
||||||
|
internal=self.parameters.internal)
|
||||||
|
|
||||||
self.existing_network = self.client.inspect_network(resp['Id'])
|
self.existing_network = self.client.inspect_network(resp['Id'])
|
||||||
self.results['actions'].append("Created network %s with driver %s" % (self.parameters.network_name, self.parameters.driver))
|
self.results['actions'].append("Created network %s with driver %s" % (self.parameters.network_name, self.parameters.driver))
|
||||||
|
@ -375,12 +395,14 @@ def main():
|
||||||
appends=dict(type='bool', default=False, aliases=['incremental']),
|
appends=dict(type='bool', default=False, aliases=['incremental']),
|
||||||
ipam_driver=dict(type='str', default=None),
|
ipam_driver=dict(type='str', default=None),
|
||||||
ipam_options=dict(type='dict', default={}),
|
ipam_options=dict(type='dict', default={}),
|
||||||
|
internal=dict(type='bool', default=None),
|
||||||
debug=dict(type='bool', default=False)
|
debug=dict(type='bool', default=False)
|
||||||
)
|
)
|
||||||
|
|
||||||
client = AnsibleDockerClient(
|
client = AnsibleDockerClient(
|
||||||
argument_spec=argument_spec,
|
argument_spec=argument_spec,
|
||||||
supports_check_mode=True
|
supports_check_mode=True,
|
||||||
|
min_docker_version='1.9.0'
|
||||||
# "The docker server >= 1.9.0"
|
# "The docker server >= 1.9.0"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,42 @@
|
||||||
|
---
|
||||||
|
- name: Registering network name
|
||||||
|
set_fact:
|
||||||
|
nname_1: "{{ name_prefix ~ '-network-1' }}"
|
||||||
|
nname_2: "{{ name_prefix ~ '-network-2' }}"
|
||||||
|
- name: Registering network name
|
||||||
|
set_fact:
|
||||||
|
dnetworks: "{{ dnetworks }} + [nname_1, nname_2]"
|
||||||
|
|
||||||
|
####################################################################
|
||||||
|
## internal ########################################################
|
||||||
|
####################################################################
|
||||||
|
|
||||||
|
- name: internal
|
||||||
|
docker_network:
|
||||||
|
name: "{{ nname_1 }}"
|
||||||
|
internal: yes
|
||||||
|
register: internal_1
|
||||||
|
|
||||||
|
- name: internal (idempotency)
|
||||||
|
docker_network:
|
||||||
|
name: "{{ nname_1 }}"
|
||||||
|
internal: yes
|
||||||
|
register: internal_2
|
||||||
|
|
||||||
|
- name: internal (change)
|
||||||
|
docker_network:
|
||||||
|
name: "{{ nname_1 }}"
|
||||||
|
internal: no
|
||||||
|
register: internal_3
|
||||||
|
|
||||||
|
- name: cleanup
|
||||||
|
docker_network:
|
||||||
|
name: "{{ nname_1 }}"
|
||||||
|
state: absent
|
||||||
|
force: yes
|
||||||
|
|
||||||
|
- assert:
|
||||||
|
that:
|
||||||
|
- internal_1 is changed
|
||||||
|
- internal_2 is not changed
|
||||||
|
- internal_3 is changed
|
Loading…
Reference in a new issue