Fix #2804: Add ipv4 and ipv6 static addressing
- Added ipv4_network and ipv6_network to the networks section in the service section for each configured network - Added feature documentation - Added unit tests Signed-off-by: Matt Daue <mattdaue@gmail.com>
This commit is contained in:
parent
8a86e204a0
commit
ee136446a2
8 changed files with 178 additions and 9 deletions
|
|
@ -152,7 +152,9 @@
|
|||
{
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"aliases": {"$ref": "#/definitions/list_of_strings"}
|
||||
"aliases": {"$ref": "#/definitions/list_of_strings"},
|
||||
"ipv4_address": {"type": "string"},
|
||||
"ipv6_address": {"type": "string"}
|
||||
},
|
||||
"additionalProperties": false
|
||||
},
|
||||
|
|
|
|||
|
|
@ -159,26 +159,26 @@ class ProjectNetworks(object):
|
|||
network.ensure()
|
||||
|
||||
|
||||
def get_network_aliases_for_service(service_dict):
|
||||
def get_network_defs_for_service(service_dict):
|
||||
if 'network_mode' in service_dict:
|
||||
return {}
|
||||
networks = service_dict.get('networks', {'default': None})
|
||||
return dict(
|
||||
(net, (config or {}).get('aliases', []))
|
||||
(net, (config or {}))
|
||||
for net, config in networks.items()
|
||||
)
|
||||
|
||||
|
||||
def get_network_names_for_service(service_dict):
|
||||
return get_network_aliases_for_service(service_dict).keys()
|
||||
return get_network_defs_for_service(service_dict).keys()
|
||||
|
||||
|
||||
def get_networks(service_dict, network_definitions):
|
||||
networks = {}
|
||||
for name, aliases in get_network_aliases_for_service(service_dict).items():
|
||||
for name, netdef in get_network_defs_for_service(service_dict).items():
|
||||
network = network_definitions.get(name)
|
||||
if network:
|
||||
networks[network.full_name] = aliases
|
||||
networks[network.full_name] = netdef
|
||||
else:
|
||||
raise ConfigurationError(
|
||||
'Service "{}" uses an undefined network "{}"'
|
||||
|
|
|
|||
|
|
@ -451,7 +451,10 @@ class Service(object):
|
|||
def connect_container_to_networks(self, container):
|
||||
connected_networks = container.get('NetworkSettings.Networks')
|
||||
|
||||
for network, aliases in self.networks.items():
|
||||
for network, netdefs in self.networks.items():
|
||||
aliases = netdefs.get('aliases', [])
|
||||
ipv4_address = netdefs.get('ipv4_address', None)
|
||||
ipv6_address = netdefs.get('ipv6_address', None)
|
||||
if network in connected_networks:
|
||||
self.client.disconnect_container_from_network(
|
||||
container.id, network)
|
||||
|
|
@ -459,7 +462,9 @@ class Service(object):
|
|||
self.client.connect_container_to_network(
|
||||
container.id, network,
|
||||
aliases=list(self._get_aliases(container).union(aliases)),
|
||||
links=self._get_links(False),
|
||||
ipv4_address=ipv4_address,
|
||||
ipv6_address=ipv6_address,
|
||||
links=self._get_links(False)
|
||||
)
|
||||
|
||||
def remove_duplicate_containers(self, timeout=DEFAULT_TIMEOUT):
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue