Procházet zdrojové kódy

Checks that origin and destination differ

Alessandro Pilotti před 9 roky
rodič
revize
d64e6652d5
2 změnil soubory, kde provedl 14 přidání a 0 odebrání
  1. 10 0
      coriolis/conductor/rpc/server.py
  2. 4 0
      coriolis/exception.py

+ 10 - 0
coriolis/conductor/rpc/server.py

@@ -237,7 +237,15 @@ class ConductorServerEndpoint(object):
         self._begin_tasks(ctxt, execution, replica.info)
         self._begin_tasks(ctxt, execution, replica.info)
         return self.get_replica_tasks_execution(ctxt, replica_id, execution.id)
         return self.get_replica_tasks_execution(ctxt, replica_id, execution.id)
 
 
+    @staticmethod
+    def _check_endpoints(ctxt, origin, destination):
+        # TODO(alexpilotti): check Barbican secrets content as well
+        if origin.get("connection_info") == destination.get("connection_info"):
+            raise exception.SameDestination()
+
     def create_instances_replica(self, ctxt, origin, destination, instances):
     def create_instances_replica(self, ctxt, origin, destination, instances):
+        self._check_endpoints(ctxt, origin, destination)
+
         replica = models.Replica()
         replica = models.Replica()
         replica.id = str(uuid.uuid4())
         replica.id = str(uuid.uuid4())
         replica.origin = origin
         replica.origin = origin
@@ -360,6 +368,8 @@ class ConductorServerEndpoint(object):
         return self.get_migration(ctxt, migration.id)
         return self.get_migration(ctxt, migration.id)
 
 
     def migrate_instances(self, ctxt, origin, destination, instances):
     def migrate_instances(self, ctxt, origin, destination, instances):
+        self._check_endpoints(ctxt, origin, destination)
+
         migration = models.Migration()
         migration = models.Migration()
         migration.id = str(uuid.uuid4())
         migration.id = str(uuid.uuid4())
         migration.origin = origin
         migration.origin = origin

+ 4 - 0
coriolis/exception.py

@@ -151,6 +151,10 @@ class InvalidHost(Invalid):
     message = _("Invalid host: %(reason)s")
     message = _("Invalid host: %(reason)s")
 
 
 
 
+class SameDestination(Invalid):
+    message = _("Origin and destination cannot be the same")
+
+
 # Cannot be templated as the error syntax varies.
 # Cannot be templated as the error syntax varies.
 # msg needs to be constructed when raised.
 # msg needs to be constructed when raised.
 class InvalidParameterValue(Invalid):
 class InvalidParameterValue(Invalid):