Alessandro Pilotti пре 9 година
родитељ
комит
8d4bece41c

+ 5 - 3
coriolis/api/v1/migrations.py

@@ -42,9 +42,10 @@ class MigrationController(api_wsgi.Controller):
             destination_endpoint_id = migration["destination_endpoint_id"]
             destination_environment = migration.get("destination_environment")
             instances = migration["instances"]
+            notes = migration.get("notes")
 
             return (origin_endpoint_id, destination_endpoint_id,
-                    destination_environment, instances)
+                    destination_environment, instances, notes)
         except Exception as ex:
             LOG.exception(ex)
             if hasattr(ex, "message"):
@@ -69,11 +70,12 @@ class MigrationController(api_wsgi.Controller):
             (origin_endpoint_id,
              destination_endpoint_id,
              destination_environment,
-             instances) = self._validate_migration_input(
+             instances,
+             notes) = self._validate_migration_input(
                 migration_body)
             migration = self._migration_api.migrate_instances(
                 context, origin_endpoint_id, destination_endpoint_id,
-                destination_environment, instances)
+                destination_environment, instances, notes)
 
         return migration_view.single(req, migration)
 

+ 6 - 3
coriolis/api/v1/replicas.py

@@ -46,9 +46,10 @@ class ReplicaController(api_wsgi.Controller):
             destination_endpoint_id = replica["destination_endpoint_id"]
             destination_environment = replica.get("destination_environment")
             instances = replica["instances"]
+            notes = replica.get("notes")
 
             return (origin_endpoint_id, destination_endpoint_id,
-                    destination_environment, instances)
+                    destination_environment, instances, notes)
         except Exception as ex:
             LOG.exception(ex)
             if hasattr(ex, "message"):
@@ -59,11 +60,13 @@ class ReplicaController(api_wsgi.Controller):
 
     def create(self, req, body):
         (origin_endpoint_id, destination_endpoint_id,
-         destination_environment, instances) = self._validate_create_body(body)
+         destination_environment, instances,
+         notes) = self._validate_create_body(body)
 
         return replica_view.single(req, self._replica_api.create(
             req.environ['coriolis.context'], origin_endpoint_id,
-            destination_endpoint_id, destination_environment, instances))
+            destination_endpoint_id, destination_environment, instances,
+            notes))
 
     def delete(self, req, id):
         try:

+ 6 - 4
coriolis/conductor/rpc/client.py

@@ -87,13 +87,14 @@ class ConductorClient(object):
     def create_instances_replica(self, ctxt, origin_endpoint_id,
                                  destination_endpoint_id,
                                  destination_environment,
-                                 instances):
+                                 instances, notes=None):
         return self._client.call(
             ctxt, 'create_instances_replica',
             origin_endpoint_id=origin_endpoint_id,
             destination_endpoint_id=destination_endpoint_id,
             destination_environment=destination_environment,
-            instances=instances)
+            instances=instances,
+            notes=notes)
 
     def get_replicas(self, ctxt, include_tasks_executions=False):
         return self._client.call(
@@ -122,13 +123,14 @@ class ConductorClient(object):
 
     def migrate_instances(self, ctxt, origin_endpoint_id,
                           destination_endpoint_id, destination_environment,
-                          instances):
+                          instances, notes=None):
         return self._client.call(
             ctxt, 'migrate_instances',
             origin_endpoint_id=origin_endpoint_id,
             destination_endpoint_id=destination_endpoint_id,
             destination_environment=destination_environment,
-            instances=instances)
+            instances=instances,
+            notes=notes)
 
     def deploy_replica_instances(self, ctxt, replica_id, clone_disks=False,
                                  force=False):

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

@@ -325,7 +325,8 @@ class ConductorServerEndpoint(object):
 
     def create_instances_replica(self, ctxt, origin_endpoint_id,
                                  destination_endpoint_id,
-                                 destination_environment, instances):
+                                 destination_environment, instances,
+                                 notes=None):
         origin_endpoint = self.get_endpoint(ctxt, origin_endpoint_id)
         destination_endpoint = self.get_endpoint(ctxt, destination_endpoint_id)
         self._check_endpoints(ctxt, origin_endpoint, destination_endpoint)
@@ -338,6 +339,7 @@ class ConductorServerEndpoint(object):
         replica.instances = instances
         replica.executions = []
         replica.info = {}
+        replica.notes = notes
 
         db_api.add_replica(ctxt, replica)
         LOG.info("Replica created: %s", replica.id)
@@ -470,7 +472,7 @@ class ConductorServerEndpoint(object):
 
     def migrate_instances(self, ctxt, origin_endpoint_id,
                           destination_endpoint_id, destination_environment,
-                          instances):
+                          instances, notes=None):
         origin_endpoint = self.get_endpoint(ctxt, origin_endpoint_id)
         destination_endpoint = self.get_endpoint(ctxt, destination_endpoint_id)
         self._check_endpoints(ctxt, origin_endpoint, destination_endpoint)
@@ -486,6 +488,7 @@ class ConductorServerEndpoint(object):
         migration.executions = [execution]
         migration.instances = instances
         migration.info = {}
+        migration.notes = notes
 
         for instance in instances:
             task_export = self._create_task(

+ 17 - 0
coriolis/db/sqlalchemy/migrate_repo/versions/003_adds_notes.py

@@ -0,0 +1,17 @@
+# Copyright 2017 Cloudbase Solutions Srl
+# All Rights Reserved.
+
+import sqlalchemy
+
+
+def upgrade(migrate_engine):
+    meta = sqlalchemy.MetaData()
+    meta.bind = migrate_engine
+
+    base_transfer_action = sqlalchemy.Table(
+        'base_transfer_action', meta, autoload=True)
+
+    notes = sqlalchemy.Column(
+        "notes", sqlalchemy.Text, nullable=True)
+
+    base_transfer_action.create_column(notes)

+ 1 - 0
coriolis/db/sqlalchemy/models.py

@@ -104,6 +104,7 @@ class BaseTransferAction(BASE, models.TimestampMixin, models.ModelBase,
                                   "TasksExecution.deleted=='0')")
     instances = sqlalchemy.Column(types.List, nullable=False)
     info = sqlalchemy.Column(types.Json, nullable=False)
+    notes = sqlalchemy.Column(sqlalchemy.Text, nullable=True)
     origin_endpoint_id = sqlalchemy.Column(
         sqlalchemy.String(36),
         sqlalchemy.ForeignKey('endpoint.id'), nullable=False)

+ 2 - 2
coriolis/migrations/api.py

@@ -10,10 +10,10 @@ class API(object):
 
     def migrate_instances(self, ctxt, origin_endpoint_id,
                           destination_endpoint_id, destination_environment,
-                          instances):
+                          instances, notes=None):
         return self._rpc_client.migrate_instances(
             ctxt, origin_endpoint_id, destination_endpoint_id,
-            destination_environment, instances)
+            destination_environment, instances, notes)
 
     def deploy_replica_instances(self, ctxt, replica_id, clone_disks=False,
                                  force=False):

+ 2 - 2
coriolis/replicas/api.py

@@ -9,10 +9,10 @@ class API(object):
         self._rpc_client = rpc_client.ConductorClient()
 
     def create(self, ctxt, origin_endpoint_id, destination_endpoint_id,
-               destination_environment, instances):
+               destination_environment, instances, notes=None):
         return self._rpc_client.create_instances_replica(
             ctxt, origin_endpoint_id, destination_endpoint_id,
-            destination_environment, instances)
+            destination_environment, instances, notes)
 
     def delete(self, ctxt, replica_id):
         self._rpc_client.delete_replica(ctxt, replica_id)