| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196 |
- # Copyright 2016 Cloudbase Solutions Srl
- # All Rights Reserved.
- import uuid
- from oslo_db.sqlalchemy import models
- import sqlalchemy
- from sqlalchemy.ext import declarative
- from sqlalchemy import orm
- from coriolis.db.sqlalchemy import types
- BASE = declarative.declarative_base()
- class TaskEvent(BASE, models.TimestampMixin, models.SoftDeleteMixin,
- models.ModelBase):
- __tablename__ = 'task_event'
- id = sqlalchemy.Column(sqlalchemy.String(36),
- default=lambda: str(uuid.uuid4()),
- primary_key=True)
- task_id = sqlalchemy.Column(sqlalchemy.String(36),
- sqlalchemy.ForeignKey('task.id'),
- nullable=False)
- level = sqlalchemy.Column(sqlalchemy.String(20), nullable=False)
- message = sqlalchemy.Column(sqlalchemy.String(1024), nullable=False)
- class TaskProgressUpdate(BASE, models.TimestampMixin, models.SoftDeleteMixin,
- models.ModelBase):
- __tablename__ = 'task_progress_update'
- id = sqlalchemy.Column(sqlalchemy.String(36),
- default=lambda: str(uuid.uuid4()),
- primary_key=True)
- task_id = sqlalchemy.Column(sqlalchemy.String(36),
- sqlalchemy.ForeignKey('task.id'),
- nullable=False)
- current_step = sqlalchemy.Column(sqlalchemy.Integer, nullable=False)
- total_steps = sqlalchemy.Column(sqlalchemy.Integer, nullable=True)
- message = sqlalchemy.Column(sqlalchemy.String(1024), nullable=True)
- class Task(BASE, models.TimestampMixin, models.SoftDeleteMixin,
- models.ModelBase):
- __tablename__ = 'task'
- id = sqlalchemy.Column(sqlalchemy.String(36),
- default=lambda: str(uuid.uuid4()),
- primary_key=True)
- execution_id = sqlalchemy.Column(
- sqlalchemy.String(36),
- sqlalchemy.ForeignKey('tasks_execution.id'), nullable=False)
- instance = sqlalchemy.Column(sqlalchemy.String(1024), nullable=False)
- host = sqlalchemy.Column(sqlalchemy.String(1024), nullable=True)
- process_id = sqlalchemy.Column(sqlalchemy.Integer, nullable=True)
- status = sqlalchemy.Column(sqlalchemy.String(100), nullable=False)
- task_type = sqlalchemy.Column(sqlalchemy.String(100), nullable=False)
- exception_details = sqlalchemy.Column(sqlalchemy.Text, nullable=True)
- depends_on = sqlalchemy.Column(types.List, nullable=True)
- on_error = sqlalchemy.Column(sqlalchemy.Boolean, nullable=False)
- # TODO(alexpilotti): Add soft delete filter
- events = orm.relationship(TaskEvent, cascade="all,delete",
- backref=orm.backref('task'))
- # TODO(alexpilotti): Add soft delete filter
- progress_updates = orm.relationship(TaskProgressUpdate,
- cascade="all,delete",
- backref=orm.backref('task'))
- class TasksExecution(BASE, models.TimestampMixin, models.ModelBase,
- models.SoftDeleteMixin):
- __tablename__ = 'tasks_execution'
- id = sqlalchemy.Column(sqlalchemy.String(36),
- default=lambda: str(uuid.uuid4()),
- primary_key=True)
- action_id = sqlalchemy.Column(
- sqlalchemy.String(36),
- sqlalchemy.ForeignKey('base_transfer_action.base_id'), nullable=False)
- # TODO(alexpilotti): Add soft delete filter
- tasks = orm.relationship(Task, cascade="all,delete",
- backref=orm.backref('execution'))
- status = sqlalchemy.Column(sqlalchemy.String(100), nullable=False)
- number = sqlalchemy.Column(sqlalchemy.Integer, nullable=False)
- class BaseTransferAction(BASE, models.TimestampMixin, models.ModelBase,
- models.SoftDeleteMixin):
- __tablename__ = 'base_transfer_action'
- base_id = sqlalchemy.Column(sqlalchemy.String(36),
- default=lambda: str(uuid.uuid4()),
- primary_key=True)
- user_id = sqlalchemy.Column(sqlalchemy.String(255), nullable=False)
- project_id = sqlalchemy.Column(sqlalchemy.String(255), nullable=False)
- destination_environment = sqlalchemy.Column(types.Json, nullable=True)
- type = sqlalchemy.Column(sqlalchemy.String(50))
- executions = orm.relationship(TasksExecution, cascade="all,delete",
- backref=orm.backref('action'),
- primaryjoin="and_(BaseTransferAction."
- "base_id==TasksExecution.action_id, "
- "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)
- destination_endpoint_id = sqlalchemy.Column(
- sqlalchemy.String(36),
- sqlalchemy.ForeignKey('endpoint.id'), nullable=False)
- transfer_result = sqlalchemy.Column(types.Json, nullable=True)
- network_map = sqlalchemy.Column(types.Json, nullable=True)
- __mapper_args__ = {
- 'polymorphic_identity': 'base_transfer_action',
- 'polymorphic_on': type,
- }
- class Replica(BaseTransferAction):
- __tablename__ = 'replica'
- id = sqlalchemy.Column(
- sqlalchemy.String(36),
- sqlalchemy.ForeignKey(
- 'base_transfer_action.base_id'), primary_key=True)
- __mapper_args__ = {
- 'polymorphic_identity': 'replica',
- }
- class Migration(BaseTransferAction):
- __tablename__ = 'migration'
- id = sqlalchemy.Column(
- sqlalchemy.String(36),
- sqlalchemy.ForeignKey(
- 'base_transfer_action.base_id'), primary_key=True)
- replica_id = sqlalchemy.Column(
- sqlalchemy.String(36),
- sqlalchemy.ForeignKey('replica.id'), nullable=True)
- replica = orm.relationship(
- Replica, backref=orm.backref("migrations"), foreign_keys=[replica_id])
- __mapper_args__ = {
- 'polymorphic_identity': 'migration',
- }
- class Endpoint(BASE, models.TimestampMixin, models.ModelBase,
- models.SoftDeleteMixin):
- __tablename__ = 'endpoint'
- id = sqlalchemy.Column(sqlalchemy.String(36),
- default=lambda: str(uuid.uuid4()),
- primary_key=True)
- user_id = sqlalchemy.Column(sqlalchemy.String(255), nullable=False)
- project_id = sqlalchemy.Column(sqlalchemy.String(255), nullable=False)
- connection_info = sqlalchemy.Column(types.Json, nullable=False)
- type = sqlalchemy.Column(sqlalchemy.String(255), nullable=False)
- name = sqlalchemy.Column(sqlalchemy.String(255), nullable=False)
- description = sqlalchemy.Column(sqlalchemy.String(1024), nullable=True)
- origin_actions = orm.relationship(
- BaseTransferAction, backref=orm.backref('origin_endpoint'),
- primaryjoin="and_(BaseTransferAction.origin_endpoint_id==Endpoint.id, "
- "BaseTransferAction.deleted=='0')")
- destination_actions = orm.relationship(
- BaseTransferAction, backref=orm.backref('destination_endpoint'),
- primaryjoin="and_(BaseTransferAction.destination_endpoint_id=="
- "Endpoint.id, BaseTransferAction.deleted=='0')")
- class ReplicaSchedule(BASE, models.TimestampMixin, models.ModelBase,
- models.SoftDeleteMixin):
- __tablename__ = "replica_schedules"
- id = sqlalchemy.Column(sqlalchemy.String(36),
- default=lambda: str(uuid.uuid4()),
- primary_key=True)
- replica_id = sqlalchemy.Column(
- sqlalchemy.String(36),
- sqlalchemy.ForeignKey('replica.id'), nullable=False)
- replica = orm.relationship(
- Replica, backref=orm.backref("schedules"), foreign_keys=[replica_id])
- schedule = sqlalchemy.Column(types.Json, nullable=False)
- expiration_date = sqlalchemy.Column(
- sqlalchemy.types.DateTime, nullable=True)
- enabled = sqlalchemy.Column(
- sqlalchemy.Boolean, nullable=False, default=True)
- shutdown_instance = sqlalchemy.Column(
- sqlalchemy.Boolean, nullable=False, default=False)
- trust_id = sqlalchemy.Column(sqlalchemy.String(255), nullable=False)
|