Fix merging of lists with multiple files.

Signed-off-by: Daniel Nephin <dnephin@docker.com>
This commit is contained in:
Daniel Nephin 2016-01-29 13:36:51 -05:00
parent c70c72f49a
commit bf6a5d3e49
2 changed files with 36 additions and 4 deletions

View File

@ -84,10 +84,7 @@ DOCKER_CONFIG_KEYS = [
ALLOWED_KEYS = DOCKER_CONFIG_KEYS + [
'build',
'container_name',
'depends_on',
'dockerfile',
'expose',
'external_links',
'logging',
]
@ -666,7 +663,14 @@ def merge_service_dicts(base, override, version):
for field in ['volumes', 'devices']:
merge_field(field, merge_path_mappings)
for field in ['ports', 'expose', 'external_links']:
for field in [
'depends_on',
'expose',
'external_links',
'links',
'ports',
'volumes_from',
]:
merge_field(field, operator.add, default=[])
for field in ['dns', 'dns_search', 'env_file']:

View File

@ -602,6 +602,7 @@ class ConfigTest(unittest.TestCase):
'services': {
'web': {
'image': 'example/web',
'depends_on': ['db'],
},
'db': {
'image': 'example/db',
@ -616,7 +617,11 @@ class ConfigTest(unittest.TestCase):
'web': {
'build': '/',
'volumes': ['/home/user/project:/code'],
'depends_on': ['other'],
},
'other': {
'image': 'example/other',
}
}
})
details = config.ConfigDetails('.', [base_file, override_file])
@ -628,11 +633,16 @@ class ConfigTest(unittest.TestCase):
'build': {'context': os.path.abspath('/')},
'image': 'example/web',
'volumes': [VolumeSpec.parse('/home/user/project:/code')],
'depends_on': ['db', 'other'],
},
{
'name': 'db',
'image': 'example/db',
},
{
'name': 'other',
'image': 'example/other',
},
]
assert service_sort(service_dicts) == service_sort(expected)
@ -2299,6 +2309,24 @@ class ExtendsTest(unittest.TestCase):
service = load_from_filename(str(tmpdir.join('docker-compose.yml')))
self.assertEquals(service[0]['command'], "top")
def test_extends_with_depends_on(self):
tmpdir = py.test.ensuretemp('test_extends_with_defined_version')
self.addCleanup(tmpdir.remove)
tmpdir.join('docker-compose.yml').write("""
version: 2
services:
base:
image: example
web:
extends: base
image: busybox
depends_on: ['other']
other:
image: example
""")
services = load_from_filename(str(tmpdir.join('docker-compose.yml')))
assert service_sort(services)[2]['depends_on'] == ['other']
@pytest.mark.xfail(IS_WINDOWS_PLATFORM, reason='paths use slash')
class ExpandPathTest(unittest.TestCase):