mirror of
https://github.com/docker/compose.git
synced 2025-07-21 20:54:32 +02:00
Include networks in the config_hash.
Signed-off-by: Daniel Nephin <dnephin@docker.com>
This commit is contained in:
parent
0810eeba10
commit
e551988616
@ -136,7 +136,7 @@ class ProjectNetworks(object):
|
|||||||
service_networks = {
|
service_networks = {
|
||||||
network: networks.get(network)
|
network: networks.get(network)
|
||||||
for service in services
|
for service in services
|
||||||
for network in service.get('networks', ['default'])
|
for network in get_network_names_for_service(service)
|
||||||
}
|
}
|
||||||
unused = set(networks) - set(service_networks) - {'default'}
|
unused = set(networks) - set(service_networks) - {'default'}
|
||||||
if unused:
|
if unused:
|
||||||
@ -159,12 +159,15 @@ class ProjectNetworks(object):
|
|||||||
network.ensure()
|
network.ensure()
|
||||||
|
|
||||||
|
|
||||||
def get_networks(service_dict, network_definitions):
|
def get_network_names_for_service(service_dict):
|
||||||
if 'network_mode' in service_dict:
|
if 'network_mode' in service_dict:
|
||||||
return []
|
return []
|
||||||
|
return service_dict.get('networks', ['default'])
|
||||||
|
|
||||||
|
|
||||||
|
def get_networks(service_dict, network_definitions):
|
||||||
networks = []
|
networks = []
|
||||||
for name in service_dict.pop('networks', ['default']):
|
for name in get_network_names_for_service(service_dict):
|
||||||
network = network_definitions.get(name)
|
network = network_definitions.get(name)
|
||||||
if network:
|
if network:
|
||||||
networks.append(network.full_name)
|
networks.append(network.full_name)
|
||||||
@ -172,4 +175,5 @@ def get_networks(service_dict, network_definitions):
|
|||||||
raise ConfigurationError(
|
raise ConfigurationError(
|
||||||
'Service "{}" uses an undefined network "{}"'
|
'Service "{}" uses an undefined network "{}"'
|
||||||
.format(service_dict['name'], name))
|
.format(service_dict['name'], name))
|
||||||
|
|
||||||
return networks
|
return networks
|
||||||
|
@ -96,6 +96,7 @@ class Project(object):
|
|||||||
|
|
||||||
project.services.append(
|
project.services.append(
|
||||||
Service(
|
Service(
|
||||||
|
service_dict.pop('name'),
|
||||||
client=client,
|
client=client,
|
||||||
project=name,
|
project=name,
|
||||||
use_networking=use_networking,
|
use_networking=use_networking,
|
||||||
|
@ -472,6 +472,7 @@ class Service(object):
|
|||||||
'image_id': self.image()['Id'],
|
'image_id': self.image()['Id'],
|
||||||
'links': self.get_link_names(),
|
'links': self.get_link_names(),
|
||||||
'net': self.network_mode.id,
|
'net': self.network_mode.id,
|
||||||
|
'networks': self.networks,
|
||||||
'volumes_from': [
|
'volumes_from': [
|
||||||
(v.source.name, v.mode)
|
(v.source.name, v.mode)
|
||||||
for v in self.volumes_from if isinstance(v.source, Service)
|
for v in self.volumes_from if isinstance(v.source, Service)
|
||||||
|
@ -406,7 +406,7 @@ class CLITestCase(DockerClientTestCase):
|
|||||||
|
|
||||||
services = self.project.get_services()
|
services = self.project.get_services()
|
||||||
|
|
||||||
network_name = self.project.networks.networks['default']
|
network_name = self.project.networks.networks['default'].full_name
|
||||||
networks = self.client.networks(names=[network_name])
|
networks = self.client.networks(names=[network_name])
|
||||||
self.assertEqual(len(networks), 1)
|
self.assertEqual(len(networks), 1)
|
||||||
self.assertEqual(networks[0]['Driver'], 'bridge')
|
self.assertEqual(networks[0]['Driver'], 'bridge')
|
||||||
@ -440,7 +440,7 @@ class CLITestCase(DockerClientTestCase):
|
|||||||
|
|
||||||
self.dispatch(['-f', filename, 'up', '-d'], None)
|
self.dispatch(['-f', filename, 'up', '-d'], None)
|
||||||
|
|
||||||
network_name = self.project.networks.networks['default']
|
network_name = self.project.networks.networks['default'].full_name
|
||||||
networks = self.client.networks(names=[network_name])
|
networks = self.client.networks(names=[network_name])
|
||||||
|
|
||||||
assert networks[0]['Options']['com.docker.network.bridge.enable_icc'] == 'false'
|
assert networks[0]['Options']['com.docker.network.bridge.enable_icc'] == 'false'
|
||||||
@ -596,7 +596,7 @@ class CLITestCase(DockerClientTestCase):
|
|||||||
self.dispatch(['up', '-d', 'web'], None)
|
self.dispatch(['up', '-d', 'web'], None)
|
||||||
|
|
||||||
# No network was created
|
# No network was created
|
||||||
network_name = self.project.networks.networks['default']
|
network_name = self.project.networks.networks['default'].full_name
|
||||||
networks = self.client.networks(names=[network_name])
|
networks = self.client.networks(names=[network_name])
|
||||||
assert networks == []
|
assert networks == []
|
||||||
|
|
||||||
|
@ -832,7 +832,8 @@ class ProjectTest(DockerClientTestCase):
|
|||||||
)
|
)
|
||||||
project = Project.from_config(
|
project = Project.from_config(
|
||||||
name='composetest',
|
name='composetest',
|
||||||
config_data=config_data, client=self.client
|
config_data=config_data,
|
||||||
|
client=self.client
|
||||||
)
|
)
|
||||||
with self.assertRaises(config.ConfigurationError) as e:
|
with self.assertRaises(config.ConfigurationError) as e:
|
||||||
project.initialize_volumes()
|
project.initialize_volumes()
|
||||||
|
@ -266,7 +266,7 @@ class ServiceTest(unittest.TestCase):
|
|||||||
|
|
||||||
self.assertEqual(
|
self.assertEqual(
|
||||||
opts['labels'][LABEL_CONFIG_HASH],
|
opts['labels'][LABEL_CONFIG_HASH],
|
||||||
'3c85881a8903b9d73a06c41860c8be08acce1494ab4cf8408375966dccd714de')
|
'f8bfa1058ad1f4231372a0b1639f0dfdb574dafff4e8d7938049ae993f7cf1fc')
|
||||||
self.assertEqual(
|
self.assertEqual(
|
||||||
opts['environment'],
|
opts['environment'],
|
||||||
{
|
{
|
||||||
@ -417,9 +417,10 @@ class ServiceTest(unittest.TestCase):
|
|||||||
'options': {'image': 'example.com/foo'},
|
'options': {'image': 'example.com/foo'},
|
||||||
'links': [('one', 'one')],
|
'links': [('one', 'one')],
|
||||||
'net': 'other',
|
'net': 'other',
|
||||||
|
'networks': [],
|
||||||
'volumes_from': [('two', 'rw')],
|
'volumes_from': [('two', 'rw')],
|
||||||
}
|
}
|
||||||
self.assertEqual(config_dict, expected)
|
assert config_dict == expected
|
||||||
|
|
||||||
def test_config_dict_with_network_mode_from_container(self):
|
def test_config_dict_with_network_mode_from_container(self):
|
||||||
self.mock_client.inspect_image.return_value = {'Id': 'abcd'}
|
self.mock_client.inspect_image.return_value = {'Id': 'abcd'}
|
||||||
@ -437,10 +438,11 @@ class ServiceTest(unittest.TestCase):
|
|||||||
'image_id': 'abcd',
|
'image_id': 'abcd',
|
||||||
'options': {'image': 'example.com/foo'},
|
'options': {'image': 'example.com/foo'},
|
||||||
'links': [],
|
'links': [],
|
||||||
|
'networks': [],
|
||||||
'net': 'aaabbb',
|
'net': 'aaabbb',
|
||||||
'volumes_from': [],
|
'volumes_from': [],
|
||||||
}
|
}
|
||||||
self.assertEqual(config_dict, expected)
|
assert config_dict == expected
|
||||||
|
|
||||||
def test_remove_image_none(self):
|
def test_remove_image_none(self):
|
||||||
web = Service('web', image='example', client=self.mock_client)
|
web = Service('web', image='example', client=self.mock_client)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user