mirror of
https://github.com/docker/compose.git
synced 2025-07-27 15:44:08 +02:00
Merge pull request #2851 from cr7pt0gr4ph7/2839-fix-networks-merging
Fix merge behavior for 'networks' and 'network_mode'.
This commit is contained in:
commit
7b5bad6050
@ -87,6 +87,7 @@ ALLOWED_KEYS = DOCKER_CONFIG_KEYS + [
|
|||||||
'container_name',
|
'container_name',
|
||||||
'dockerfile',
|
'dockerfile',
|
||||||
'logging',
|
'logging',
|
||||||
|
'network_mode',
|
||||||
]
|
]
|
||||||
|
|
||||||
DOCKER_VALID_URL_PREFIXES = (
|
DOCKER_VALID_URL_PREFIXES = (
|
||||||
@ -698,6 +699,7 @@ def merge_service_dicts(base, override, version):
|
|||||||
'depends_on',
|
'depends_on',
|
||||||
'expose',
|
'expose',
|
||||||
'external_links',
|
'external_links',
|
||||||
|
'networks',
|
||||||
'ports',
|
'ports',
|
||||||
'volumes_from',
|
'volumes_from',
|
||||||
]:
|
]:
|
||||||
|
@ -1506,57 +1506,54 @@ class VolumeConfigTest(unittest.TestCase):
|
|||||||
|
|
||||||
|
|
||||||
class MergePathMappingTest(object):
|
class MergePathMappingTest(object):
|
||||||
def config_name(self):
|
config_name = ""
|
||||||
return ""
|
|
||||||
|
|
||||||
def test_empty(self):
|
def test_empty(self):
|
||||||
service_dict = config.merge_service_dicts({}, {}, DEFAULT_VERSION)
|
service_dict = config.merge_service_dicts({}, {}, DEFAULT_VERSION)
|
||||||
assert self.config_name() not in service_dict
|
assert self.config_name not in service_dict
|
||||||
|
|
||||||
def test_no_override(self):
|
def test_no_override(self):
|
||||||
service_dict = config.merge_service_dicts(
|
service_dict = config.merge_service_dicts(
|
||||||
{self.config_name(): ['/foo:/code', '/data']},
|
{self.config_name: ['/foo:/code', '/data']},
|
||||||
{},
|
{},
|
||||||
DEFAULT_VERSION)
|
DEFAULT_VERSION)
|
||||||
assert set(service_dict[self.config_name()]) == set(['/foo:/code', '/data'])
|
assert set(service_dict[self.config_name]) == set(['/foo:/code', '/data'])
|
||||||
|
|
||||||
def test_no_base(self):
|
def test_no_base(self):
|
||||||
service_dict = config.merge_service_dicts(
|
service_dict = config.merge_service_dicts(
|
||||||
{},
|
{},
|
||||||
{self.config_name(): ['/bar:/code']},
|
{self.config_name: ['/bar:/code']},
|
||||||
DEFAULT_VERSION)
|
DEFAULT_VERSION)
|
||||||
assert set(service_dict[self.config_name()]) == set(['/bar:/code'])
|
assert set(service_dict[self.config_name]) == set(['/bar:/code'])
|
||||||
|
|
||||||
def test_override_explicit_path(self):
|
def test_override_explicit_path(self):
|
||||||
service_dict = config.merge_service_dicts(
|
service_dict = config.merge_service_dicts(
|
||||||
{self.config_name(): ['/foo:/code', '/data']},
|
{self.config_name: ['/foo:/code', '/data']},
|
||||||
{self.config_name(): ['/bar:/code']},
|
{self.config_name: ['/bar:/code']},
|
||||||
DEFAULT_VERSION)
|
DEFAULT_VERSION)
|
||||||
assert set(service_dict[self.config_name()]) == set(['/bar:/code', '/data'])
|
assert set(service_dict[self.config_name]) == set(['/bar:/code', '/data'])
|
||||||
|
|
||||||
def test_add_explicit_path(self):
|
def test_add_explicit_path(self):
|
||||||
service_dict = config.merge_service_dicts(
|
service_dict = config.merge_service_dicts(
|
||||||
{self.config_name(): ['/foo:/code', '/data']},
|
{self.config_name: ['/foo:/code', '/data']},
|
||||||
{self.config_name(): ['/bar:/code', '/quux:/data']},
|
{self.config_name: ['/bar:/code', '/quux:/data']},
|
||||||
DEFAULT_VERSION)
|
DEFAULT_VERSION)
|
||||||
assert set(service_dict[self.config_name()]) == set(['/bar:/code', '/quux:/data'])
|
assert set(service_dict[self.config_name]) == set(['/bar:/code', '/quux:/data'])
|
||||||
|
|
||||||
def test_remove_explicit_path(self):
|
def test_remove_explicit_path(self):
|
||||||
service_dict = config.merge_service_dicts(
|
service_dict = config.merge_service_dicts(
|
||||||
{self.config_name(): ['/foo:/code', '/quux:/data']},
|
{self.config_name: ['/foo:/code', '/quux:/data']},
|
||||||
{self.config_name(): ['/bar:/code', '/data']},
|
{self.config_name: ['/bar:/code', '/data']},
|
||||||
DEFAULT_VERSION)
|
DEFAULT_VERSION)
|
||||||
assert set(service_dict[self.config_name()]) == set(['/bar:/code', '/data'])
|
assert set(service_dict[self.config_name]) == set(['/bar:/code', '/data'])
|
||||||
|
|
||||||
|
|
||||||
class MergeVolumesTest(unittest.TestCase, MergePathMappingTest):
|
class MergeVolumesTest(unittest.TestCase, MergePathMappingTest):
|
||||||
def config_name(self):
|
config_name = 'volumes'
|
||||||
return 'volumes'
|
|
||||||
|
|
||||||
|
|
||||||
class MergeDevicesTest(unittest.TestCase, MergePathMappingTest):
|
class MergeDevicesTest(unittest.TestCase, MergePathMappingTest):
|
||||||
def config_name(self):
|
config_name = 'devices'
|
||||||
return 'devices'
|
|
||||||
|
|
||||||
|
|
||||||
class BuildOrImageMergeTest(unittest.TestCase):
|
class BuildOrImageMergeTest(unittest.TestCase):
|
||||||
@ -1594,30 +1591,49 @@ class BuildOrImageMergeTest(unittest.TestCase):
|
|||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
class MergeListsTest(unittest.TestCase):
|
class MergeListsTest(object):
|
||||||
|
config_name = ""
|
||||||
|
base_config = []
|
||||||
|
override_config = []
|
||||||
|
|
||||||
|
def merged_config(self):
|
||||||
|
return set(self.base_config) | set(self.override_config)
|
||||||
|
|
||||||
def test_empty(self):
|
def test_empty(self):
|
||||||
assert 'ports' not in config.merge_service_dicts({}, {}, DEFAULT_VERSION)
|
assert self.config_name not in config.merge_service_dicts({}, {}, DEFAULT_VERSION)
|
||||||
|
|
||||||
def test_no_override(self):
|
def test_no_override(self):
|
||||||
service_dict = config.merge_service_dicts(
|
service_dict = config.merge_service_dicts(
|
||||||
{'ports': ['10:8000', '9000']},
|
{self.config_name: self.base_config},
|
||||||
{},
|
{},
|
||||||
DEFAULT_VERSION)
|
DEFAULT_VERSION)
|
||||||
assert set(service_dict['ports']) == set(['10:8000', '9000'])
|
assert set(service_dict[self.config_name]) == set(self.base_config)
|
||||||
|
|
||||||
def test_no_base(self):
|
def test_no_base(self):
|
||||||
service_dict = config.merge_service_dicts(
|
service_dict = config.merge_service_dicts(
|
||||||
{},
|
{},
|
||||||
{'ports': ['10:8000', '9000']},
|
{self.config_name: self.base_config},
|
||||||
DEFAULT_VERSION)
|
DEFAULT_VERSION)
|
||||||
assert set(service_dict['ports']) == set(['10:8000', '9000'])
|
assert set(service_dict[self.config_name]) == set(self.base_config)
|
||||||
|
|
||||||
def test_add_item(self):
|
def test_add_item(self):
|
||||||
service_dict = config.merge_service_dicts(
|
service_dict = config.merge_service_dicts(
|
||||||
{'ports': ['10:8000', '9000']},
|
{self.config_name: self.base_config},
|
||||||
{'ports': ['20:8000']},
|
{self.config_name: self.override_config},
|
||||||
DEFAULT_VERSION)
|
DEFAULT_VERSION)
|
||||||
assert set(service_dict['ports']) == set(['10:8000', '9000', '20:8000'])
|
assert set(service_dict[self.config_name]) == set(self.merged_config())
|
||||||
|
|
||||||
|
|
||||||
|
class MergePortsTest(unittest.TestCase, MergeListsTest):
|
||||||
|
config_name = 'ports'
|
||||||
|
base_config = ['10:8000', '9000']
|
||||||
|
override_config = ['20:8000']
|
||||||
|
|
||||||
|
|
||||||
|
class MergeNetworksTest(unittest.TestCase, MergeListsTest):
|
||||||
|
config_name = 'networks'
|
||||||
|
base_config = ['frontend', 'backend']
|
||||||
|
override_config = ['monitoring']
|
||||||
|
|
||||||
|
|
||||||
class MergeStringsOrListsTest(unittest.TestCase):
|
class MergeStringsOrListsTest(unittest.TestCase):
|
||||||
|
Loading…
x
Reference in New Issue
Block a user