Browse Source

external volume disallows other config keys

Signed-off-by: Joffrey F <[email protected]>
Joffrey F 10 years ago
parent
commit
e76b2679eb
2 changed files with 38 additions and 17 deletions
  1. 25 17
      compose/config/fields_schema_v2.json
  2. 13 0
      tests/unit/config/config_test.py

+ 25 - 17
compose/config/fields_schema_v2.json

@@ -32,24 +32,32 @@
   "definitions": {
     "volume": {
       "id": "#/definitions/volume",
-      "type": "object",
-      "properties": {
-        "driver": {"type": "string"},
-        "driver_opts": {
-          "type": "object",
-          "patternProperties": {
-            "^.+$": {"type": ["string", "number"]}
-          },
-          "additionalProperties": false
+      "oneOf": [{
+        "type": "object",
+        "properties": {
+          "driver": {"type": "string"},
+          "driver_opts": {
+            "type": "object",
+            "patternProperties": {
+              "^.+$": {"type": ["string", "number"]}
+            },
+            "additionalProperties": false
+          }
         },
-        "external": {
-          "type": ["boolean", "object"],
-          "properties": {
-            "name": {"type": "string"}
-          },
-          "additionalProperties": false
-        }
-      }
+        "additionalProperties": false
+      }, {
+        "type": "object",
+        "properties": {
+          "external": {
+            "type": ["boolean", "object"],
+            "properties": {
+              "name": {"type": "string"}
+            },
+            "additionalProperties": false
+          }
+        },
+        "additionalProperties": false
+      }]
     }
   },
   "additionalProperties": false

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

@@ -793,6 +793,19 @@ class ConfigTest(unittest.TestCase):
         assert 'ext2' in volumes
         assert volumes['ext2']['external']['name'] == 'aliased'
 
+    def test_external_volume_invalid_config(self):
+        config_details = build_config_details({
+            'version': 2,
+            'services': {
+                'bogus': {'image': 'busybox'}
+            },
+            'volumes': {
+                'ext': {'external': True, 'driver': 'foo'}
+            }
+        })
+        with self.assertRaises(ConfigurationError):
+            config.load(config_details)
+
 
 class PortsTest(unittest.TestCase):
     INVALID_PORTS_TYPES = [