Ver código fonte

Fix merging of lists with multiple files.

Signed-off-by: Daniel Nephin <[email protected]>
Daniel Nephin 9 anos atrás
pai
commit
bf6a5d3e49
2 arquivos alterados com 36 adições e 4 exclusões
  1. 8 4
      compose/config/config.py
  2. 28 0
      tests/unit/config/config_test.py

+ 8 - 4
compose/config/config.py

@@ -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']:

+ 28 - 0
tests/unit/config/config_test.py

@@ -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):