2
0
Эх сурвалжийг харах

Improve 'user_scripts' validation

Daniel Vincze 5 жил өмнө
parent
commit
1f8ef7ebec

+ 5 - 2
coriolis/api/v1/replicas.py

@@ -241,9 +241,12 @@ class ReplicaController(api_wsgi.Controller):
         final_values['storage_mappings'] = self._update_storage_mappings(
             original_storage_mappings, new_storage_mappings)
 
-        final_values['user_scripts'] = self._get_updated_user_scripts(
-            replica.get('user_scripts', {}),
+        original_user_scripts = api_utils.validate_user_scripts(
+            replica.get('user_scripts', {}))
+        new_user_scripts = api_utils.validate_user_scripts(
             updated_values.get('user_scripts', {}))
+        final_values['user_scripts'] = self._get_updated_user_scripts(
+            original_user_scripts, new_user_scripts)
 
         if 'notes' in updated_values:
             final_values['notes'] = updated_values.get('notes', '')

+ 4 - 0
coriolis/api/v1/utils.py

@@ -89,6 +89,8 @@ def _build_keyerror_message(resource, method, key):
 
 
 def validate_user_scripts(user_scripts):
+    if user_scripts is None:
+        user_scripts = {}
     if not isinstance(user_scripts, dict):
         raise exception.InvalidInput(
             reason='"user_scripts" must be of JSON object format')
@@ -112,6 +114,8 @@ def validate_user_scripts(user_scripts):
                    'the instances in the Replica/Migration and their '
                    'respective scripts.')
 
+    return user_scripts
+
 
 def normalize_user_scripts(user_scripts, instances):
     """ Removes instance user_scripts if said instance is not one of the

+ 2 - 2
coriolis/conductor/rpc/server.py

@@ -1181,7 +1181,7 @@ class ConductorServerEndpoint(object):
         replica.storage_mappings = storage_mappings
         replica.instance_osmorphing_minion_pool_mappings = (
             instance_osmorphing_minion_pool_mappings)
-        replica.user_scripts = user_scripts
+        replica.user_scripts = user_scripts or {}
 
         self._check_minion_pools_for_action(ctxt, replica)
 
@@ -1726,7 +1726,7 @@ class ConductorServerEndpoint(object):
         migration.executions = [execution]
         migration.instances = instances
         migration.info = {}
-        migration.user_scripts = user_scripts
+        migration.user_scripts = user_scripts or {}
         migration.notes = notes
         migration.shutdown_instances = shutdown_instances
         migration.replication_count = replication_count