Jelajahi Sumber

Add schema validation for storage listing.

Arin Toaca 7 tahun lalu
induk
melakukan
6c12dcce65

+ 4 - 0
coriolis/schemas.py

@@ -28,6 +28,7 @@ _SCHEDULE_API_BODY_SCHEMA_NAME = "replica_schedule_schema.json"
 _CORIOLIS_DESTINATION_OPTIONS_SCHEMA_NAME = "destination_options_schema.json"
 _CORIOLIS_NETWORK_MAP_SCHEMA_NAME = "network_map_schema.json"
 _CORIOLIS_STORAGE_MAPPINGS_SCHEMA_NAME = "storage_mappings_schema.json"
+_CORIOLIS_VM_STORAGE_SCHEMA_NAME = "vm_storage_schema.json"
 
 
 def get_schema(package_name, schema_name,
@@ -93,3 +94,6 @@ CORIOLIS_NETWORK_MAP_SCHEMA = get_schema(
 
 CORIOLIS_STORAGE_MAPPINGS_SCHEMA = get_schema(
     __name__, _CORIOLIS_STORAGE_MAPPINGS_SCHEMA_NAME)
+
+CORIOLIS_VM_STORAGE_SCHEMA = get_schema(
+    __name__, _CORIOLIS_VM_STORAGE_SCHEMA_NAME)

+ 32 - 0
coriolis/schemas/vm_storage_schema.json

@@ -0,0 +1,32 @@
+{
+  "$schema": "http://cloudbase.it/coriolis/schemas/vm_storage_info#",
+  "type": "object",
+  "properties": {
+    "storage_backends": {
+      "type": "array",
+      "items": {
+        "type": "object",
+        "additionalProperties": false,
+        "properties": {
+          "id": {
+            "type": "string"
+          },
+          "name": {
+            "type": "string"
+          }
+        },
+      "required": [
+        "id",
+        "name"
+      ]
+     }
+    },
+    "config_default": {
+      "type": "string"
+    }
+  },
+  "required": [
+    "storage_backends"
+  ],
+  "additionalProperties": false
+}

+ 2 - 0
coriolis/worker/rpc/server.py

@@ -287,6 +287,8 @@ class WorkerServerEndpoint(object):
         storage = provider.get_storage(
             ctxt, secret_connection_info, env)
 
+        schemas.validate_value(storage, schemas.CORIOLIS_VM_STORAGE_SCHEMA)
+
         return storage
 
     def get_available_providers(self, ctxt):