Pārlūkot izejas kodu

Fix handling of service.dockerfile key

Made invalid in v2 format
Doesn't break build config anymore

Signed-off-by: Joffrey F <[email protected]>
Joffrey F 10 gadi atpakaļ
vecāks
revīzija
13063a96cb

+ 6 - 0
compose/config/config.py

@@ -562,6 +562,12 @@ def normalize_v1_service_format(service_dict):
             service_dict['logging']['options'] = service_dict['log_opt']
             del service_dict['log_opt']
 
+    if 'dockerfile' in service_dict:
+        service_dict['build'] = service_dict.get('build', {})
+        service_dict['build'].update({
+            'dockerfile': service_dict.pop('dockerfile')
+        })
+
     return service_dict
 
 

+ 0 - 1
compose/config/service_schema_v2.json

@@ -45,7 +45,6 @@
         "devices": {"type": "array", "items": {"type": "string"}, "uniqueItems": true},
         "dns": {"$ref": "#/definitions/string_or_list"},
         "dns_search": {"$ref": "#/definitions/string_or_list"},
-        "dockerfile": {"type": "string"},
         "domainname": {"type": "string"},
         "entrypoint": {
           "oneOf": [

+ 27 - 15
tests/unit/config/config_test.py

@@ -430,23 +430,35 @@ class ConfigTest(unittest.TestCase):
         self.assertEqual(service[0]['build']['dockerfile'], 'Dockerfile-alt')
 
     def test_config_build_configuration_v2(self):
-        service = config.load(
-            build_config_details(
-                {
-                    'version': 2,
-                    'services': {
-                        'web': {
-                            'build': '.',
-                            'dockerfile': 'Dockerfile-alt'
+        # service.dockerfile is invalid in v2
+        with self.assertRaises(ConfigurationError):
+            config.load(
+                build_config_details(
+                    {
+                        'version': 2,
+                        'services': {
+                            'web': {
+                                'build': '.',
+                                'dockerfile': 'Dockerfile-alt'
+                            }
                         }
-                    }
-                },
-                'tests/fixtures/extends',
-                'filename.yml'
+                    },
+                    'tests/fixtures/extends',
+                    'filename.yml'
+                )
             )
-        ).services
-        self.assertTrue('context' in service[0]['build'])
-        self.assertEqual(service[0]['build']['dockerfile'], 'Dockerfile-alt')
+
+        service = config.load(
+            build_config_details({
+                'version': 2,
+                'services': {
+                    'web': {
+                        'build': '.'
+                    }
+                }
+            }, 'tests/fixtures/extends', 'filename.yml')
+        ).services[0]
+        self.assertTrue('context' in service['build'])
 
         service = config.load(
             build_config_details(