Просмотр исходного кода

Expose `auto_deploy` option to transfer schedules

Adds ability to transfer schedules to start a deployer execution
Daniel Vincze 1 год назад
Родитель
Сommit
a1c171d824

+ 9 - 4
coriolis/api/v1/transfer_schedules.py

@@ -75,7 +75,8 @@ class TransferScheduleController(api_wsgi.Controller):
         if exp is not None:
             exp = self._validate_expiration_date(exp)
         shutdown = body.get("shutdown_instance", False)
-        return (schedule, enabled, exp, shutdown)
+        auto_deploy = body.get('auto_deploy', False)
+        return schedule, enabled, exp, shutdown, auto_deploy
 
     def _validate_update_body(self, update_body):
         body = {}
@@ -89,6 +90,9 @@ class TransferScheduleController(api_wsgi.Controller):
         shutdown = update_body.get("shutdown_instance")
         if shutdown is not None:
             body["shutdown_instance"] = shutdown
+        auto_deploy = update_body.get('auto_deploy')
+        if auto_deploy is not None:
+            body['auto_deploy'] = auto_deploy
         schemas.validate_value(
             body, schemas.SCHEDULE_API_BODY_SCHEMA,
             format_checker=jsonschema.FormatChecker())
@@ -107,13 +111,14 @@ class TransferScheduleController(api_wsgi.Controller):
 
         LOG.debug("Got request: %r %r %r" % (req, transfer_id, body))
         try:
-            schedule, enabled, exp_date, shutdown = self._validate_create_body(
-                body)
+            schedule, enabled, exp_date, shutdown, auto_deploy = (
+                self._validate_create_body(body))
         except Exception as err:
             raise exception.InvalidInput(err)
 
         return transfer_schedule_view.single(self._schedule_api.create(
-            context, transfer_id, schedule, enabled, exp_date, shutdown))
+            context, transfer_id, schedule, enabled, exp_date, shutdown,
+            auto_deploy))
 
     def update(self, req, transfer_id, id, body):
         context = req.environ["coriolis.context"]

+ 3 - 2
coriolis/conductor/rpc/client.py

@@ -303,14 +303,15 @@ class ConductorClient(rpc.BaseRPCClient):
 
     def create_transfer_schedule(self, ctxt, transfer_id,
                                  schedule, enabled, exp_date,
-                                 shutdown_instance):
+                                 shutdown_instance, auto_deploy):
         return self._call(
             ctxt, 'create_transfer_schedule',
             transfer_id=transfer_id,
             schedule=schedule,
             enabled=enabled,
             exp_date=exp_date,
-            shutdown_instance=shutdown_instance)
+            shutdown_instance=shutdown_instance,
+            auto_deploy=auto_deploy)
 
     def update_transfer_schedule(self, ctxt, transfer_id, schedule_id,
                                  updated_values):

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

@@ -3297,7 +3297,7 @@ class ConductorServerEndpoint(object):
 
     def create_transfer_schedule(self, ctxt, transfer_id,
                                  schedule, enabled, exp_date,
-                                 shutdown_instance):
+                                 shutdown_instance, auto_deploy):
         keystone.create_trust(ctxt)
         transfer = self._get_transfer(ctxt, transfer_id)
         transfer_schedule = models.TransferSchedule()
@@ -3308,6 +3308,7 @@ class ConductorServerEndpoint(object):
         transfer_schedule.expiration_date = exp_date
         transfer_schedule.enabled = enabled
         transfer_schedule.shutdown_instance = shutdown_instance
+        transfer_schedule.auto_deploy = auto_deploy
         transfer_schedule.trust_id = ctxt.trust_id
 
         db_api.add_transfer_schedule(

+ 12 - 0
coriolis/db/sqlalchemy/migrate_repo/versions/022_adds_auto_deploy_column.py

@@ -0,0 +1,12 @@
+import sqlalchemy
+
+
+def upgrade(migrate_engine):
+    meta = sqlalchemy.MetaData()
+    meta.bind = migrate_engine
+
+    transfer_schedule = sqlalchemy.Table(
+        'transfer_schedules', meta, autoload=True)
+    auto_deploy = sqlalchemy.Column(
+        'auto_deploy', sqlalchemy.Boolean, nullable=False, default=False)
+    transfer_schedule.create_column(auto_deploy)

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

@@ -685,4 +685,6 @@ class TransferSchedule(BASE, models.TimestampMixin, models.ModelBase,
         sqlalchemy.Boolean, nullable=False, default=lambda: False)
     shutdown_instance = sqlalchemy.Column(
         sqlalchemy.Boolean, nullable=False, default=False)
+    auto_deploy = sqlalchemy.Column(
+        sqlalchemy.Boolean, nullable=False, default=False)
     trust_id = sqlalchemy.Column(sqlalchemy.String(255), nullable=False)

+ 4 - 0
coriolis/schemas/transfer_schedule_schema.json

@@ -51,6 +51,10 @@
     "shutdown_instance": {
       "type": "boolean",
       "description": "Shutdown instance before creating a snapshot."
+    },
+    "auto_deploy": {
+      "type": "boolean",
+      "description": "Deploy transfer automatically after the execution finishes."
     }
   }
 }

+ 2 - 2
coriolis/transfer_cron/api.py

@@ -9,10 +9,10 @@ class API(object):
         self._rpc_client = rpc_client.ConductorClient()
 
     def create(self, ctxt, transfer_id, schedule, enabled,
-               exp_date, shutdown_instance):
+               exp_date, shutdown_instance, auto_deploy):
         return self._rpc_client.create_transfer_schedule(
             ctxt, transfer_id, schedule, enabled, exp_date,
-            shutdown_instance)
+            shutdown_instance, auto_deploy)
 
     def get_schedules(self, ctxt, transfer_id, expired=True):
         return self._rpc_client.get_transfer_schedules(