def upgrade(): op.create_table( 'parameter', sa.Column('id', sa.Integer, primary_key=True, nullable=False), sa.Column('plan_id', sa.Integer, sa.ForeignKey('plan.id'), nullable=False), sa.Column('user_defined_params', models.YAMLEncodedDict(65535)), sa.Column('sys_defined_params', models.YAMLEncodedDict(65535)), sa.Column('created_at', sa.DateTime, default=timeutils.utcnow), sa.Column('updated_at', sa.DateTime, onupdate=timeutils.utcnow), )
def upgrade(): op.create_table( 'workflow', sa.Column('id', sa.String(length=36), primary_key=True, nullable=False), sa.Column('created_at', sa.DateTime, default=timeutils.utcnow), sa.Column('updated_at', sa.DateTime, onupdate=timeutils.utcnow), sa.Column('deleted_at', sa.DateTime, onupdate=timeutils.utcnow), sa.Column('deleted', sa.Boolean, default=False, nullable=False), sa.Column('project_id', sa.String(length=36)), sa.Column('user_id', sa.String(length=36)), sa.Column('app_id', sa.String(length=36), nullable=False), sa.Column('wf_id', sa.Integer(), nullable=False), sa.Column('source', models.YAMLEncodedDict(1024)), sa.Column('config', models.YAMLEncodedDict(1024)), sa.Column('actions', models.YAMLEncodedDict(1024)), sa.Column('status', sa.String(length=36)), sa.Column('assembly', sa.Integer) )
class Parameter(sql.Base, abstract.Parameter): """Represent a parameter in sqlalchemy.""" __resource__ = 'parameters' __tablename__ = 'parameter' __table_args__ = sql.table_args() id = sa.Column(sa.Integer, primary_key=True, autoincrement=True) plan_id = sa.Column(sa.Integer, sa.ForeignKey('plan.id'), nullable=False) user_defined_params = sa.Column(sql.YAMLEncodedDict(65535)) sys_defined_params = sa.Column(sql.YAMLEncodedDict(65535)) @classmethod def get_by_plan_id(cls, context, p_id): try: session = sql.SolumBase.get_session() return session.query(cls).filter_by(plan_id=p_id).one() except exc.NoResultFound: return None
def upgrade(): op.create_table( 'app', sa.Column('id', sa.String(length=36), primary_key=True, nullable=False), sa.Column('created_at', sa.DateTime, default=timeutils.utcnow), sa.Column('updated_at', sa.DateTime, onupdate=timeutils.utcnow), sa.Column('deleted', sa.Boolean, default=False, nullable=False), sa.Column('project_id', sa.String(length=36)), sa.Column('user_id', sa.String(length=36)), sa.Column('languagepack', sa.String(length=100), nullable=False), sa.Column('stack_id', sa.String(length=36)), sa.Column('name', sa.String(length=100), nullable=False), sa.Column('description', sa.String(length=255), nullable=False), sa.Column('ports', models.YAMLEncodedDict(1024)), sa.Column('source', models.YAMLEncodedDict(1024)), sa.Column('workflow_config', models.YAMLEncodedDict(1024)), sa.Column('trigger_uuid', sa.String(length=36)), sa.Column('trigger_actions', models.YAMLEncodedDict(1024)), sa.Column('trust_id', sa.String(length=255)), sa.Column('trust_user', sa.String(length=256)), )
class Plan(sql.Base, abstract.Plan): """Represent a plan in sqlalchemy.""" __resource__ = 'plans' __tablename__ = 'plan' __table_args__ = sql.table_args() id = sa.Column(sa.Integer, primary_key=True, autoincrement=True) uuid = sa.Column(sa.String(36)) project_id = sa.Column(sa.String(36)) user_id = sa.Column(sa.String(36)) name = sa.Column(sa.String(255), nullable=False) description = sa.Column(sa.String(255)) raw_content = sa.Column(sql.YAMLEncodedDict(2048)) trigger_id = sa.Column(sa.String(36)) trust_id = sa.Column(sa.String(255)) username = sa.Column(sa.String(256)) @classmethod def _raise_trigger_not_found(cls, item_id): """Raise a NotFound exception.""" raise exception.ResourceNotFound(id=item_id, name='trigger') @classmethod def get_by_trigger_id(cls, context, trigger_id): try: session = sql.Base.get_session() return session.query(cls).filter_by(trigger_id=trigger_id).one() except sa.orm.exc.NoResultFound: cls._raise_trigger_not_found(trigger_id) @classmethod def get_by_uuid(cls, context, app_id): try: session = sql.Base.get_session() return session.query(cls).filter_by(uuid=app_id).one() except sa.orm.exc.NoResultFound as e: LOG.exception(e) raise exception.ResourceNotFound(id=app_id, name='plan') def _non_updatable_fields(self): return set(('uuid', 'id', 'project_id')) def refined_content(self): if self.raw_content and self.uuid: self.raw_content['uuid'] = self.uuid return self.raw_content
class Plan(sql.Base, abstract.Plan): """Represent a plan in sqlalchemy.""" __resource__ = 'plans' __tablename__ = 'plan' __table_args__ = sql.table_args() id = sqlalchemy.Column(sqlalchemy.Integer, primary_key=True, autoincrement=True) uuid = sqlalchemy.Column(sqlalchemy.String(36)) project_id = sqlalchemy.Column(sqlalchemy.String(36)) user_id = sqlalchemy.Column(sqlalchemy.String(36)) name = sqlalchemy.Column(sqlalchemy.String(255)) description = sqlalchemy.Column(sqlalchemy.String(255)) raw_content = sqlalchemy.Column(sql.YAMLEncodedDict(2048)) def refined_content(self): if self.raw_content and self.uuid: self.raw_content['uuid'] = self.uuid return self.raw_content
class App(sql.Base, abstract.App): """Represent an app in sqlalchemy.""" __tablename__ = 'app' __resource__ = 'apps' __table_args__ = sql.table_args() id = sa.Column(sa.String(36), primary_key=True) deleted = sa.Column(sa.Boolean, default=False) project_id = sa.Column(sa.String(36)) user_id = sa.Column(sa.String(36)) languagepack = sa.Column(sa.String(1024)) stack_id = sa.Column(sa.String(36)) name = sa.Column(sa.String(length=100)) description = sa.Column(sa.String(length=255)) ports = sa.Column(sql.YAMLEncodedDict(1024)) source = sa.Column(sql.YAMLEncodedDict(1024)) workflow_config = sa.Column(sql.YAMLEncodedDict(1024)) trigger_uuid = sa.Column(sa.String(length=36)) trigger_actions = sa.Column(sql.YAMLEncodedDict(1024)) trust_id = sa.Column(sa.String(255)) trust_user = sa.Column(sa.String(256)) status = sa.Column(sa.String(36)) app_url = sa.Column(sa.String(1024)) def _non_updatable_fields(self): return set(('id', 'project_id')) @classmethod def get_by_uuid(cls, context, item_uuid): app = cls.get_by_id(context, item_uuid) return app @classmethod def get_by_trigger_id(cls, context, trigger_id): try: session = sql.Base.get_session() return session.query(cls).filter_by(trigger_uuid=trigger_id).one() except sa.orm.exc.NoResultFound: cls._raise_trigger_not_found(trigger_id) @classmethod def get_all_by_lp(cls, context, lp): session = sql.SolumBase.get_session() apps = [] with session.begin(): query = session.query(cls).filter_by(languagepack=lp) apps = sql.filter_by_project(context, query).all() return apps @classmethod @sql.retry def update_and_save(cls, context, id_or_uuid, data): try: session = sql.SolumBase.get_session() with session.begin(): query = session.query(cls).filter_by(id=id_or_uuid) obj = sql.filter_by_project(context, query).one() if obj._is_updatable(): obj.update(data) session.merge(obj) return obj except orm_exc.NoResultFound: cls._raise_not_found(id_or_uuid)
class Workflow(sql.Base, abstract.Workflow): """Represent an app workflow in sqlalchemy.""" __tablename__ = 'workflow' __resource__ = 'workflows' __table_args__ = sql.table_args() id = sa.Column(sa.String(36), primary_key=True) deleted = sa.Column(sa.Boolean, default=False) project_id = sa.Column(sa.String(36)) user_id = sa.Column(sa.String(36)) app_id = sa.Column(sa.String(36)) wf_id = sa.Column(sa.Integer()) source = sa.Column(sql.YAMLEncodedDict(1024)) config = sa.Column(sql.YAMLEncodedDict(1024)) actions = sa.Column(sql.YAMLEncodedDict(1024)) assembly = sa.Column(sa.Integer()) status = sa.Column(sa.String(36)) result = sa.Column(sa.Text) def _non_updatable_fields(self): return set(('id', 'project_id')) @classmethod def get_by_assembly_id(cls, assembly_id): try: session = sql.Base.get_session() result = session.query(Workflow) result = result.filter(Workflow.assembly == assembly_id) return result.one() except orm_exc.NoResultFound: cls._raise_not_found(assembly_id) @classmethod def get_by_uuid(cls, context, item_uuid): return cls.get_by_id(context, item_uuid) @classmethod @sql.retry def update_and_save(cls, context, id_or_uuid, data): try: session = sql.SolumBase.get_session() with session.begin(): query = session.query(cls).filter_by(id=id_or_uuid) obj = sql.filter_by_project(context, query).one() if obj._is_updatable(): obj.update(data) session.merge(obj) return obj except orm_exc.NoResultFound: cls._raise_not_found(id_or_uuid) @classmethod @sql.retry def insert(cls, context, db_obj): try: ss = sql.Base.get_session() with ss.begin(): s = text("select max(wf_id) as max_wf_id " "from workflow where app_id like :app") res = ss.execute(s, params=dict(app=db_obj.app_id)).fetchone() if res.max_wf_id: db_obj.wf_id = res.max_wf_id + 1 else: db_obj.wf_id = 1 db_obj.create(context) except orm_exc.NoResultFound: cls._raise_not_found(db_obj.app_id) @classmethod @sql.retry def destroy(cls, app_id): # Delete relevant plan, assembly, component on workflow delete try: session = sql.Base.get_session() plan_id = None image_name = None with session.begin(): wfs = session.query(cls).filter_by(app_id=app_id).all() for wf_obj in wfs: asm = session.query(assembly.Assembly).filter_by( id=wf_obj.assembly).one() plan_id = asm.plan_id image_name = asm.name # delete component session.query(component.Component).filter_by( assembly_id=wf_obj.assembly).delete() # delete assembly session.query(assembly.Assembly).filter_by( id=wf_obj.assembly).delete() # delete plan if not plan_id: plan_id = app_id session.query(plan.Plan).filter_by(id=plan_id).delete() # delete workflows session.query(cls).filter_by(app_id=app_id).delete() # delete image if image_name: session.query(image.Image).filter_by( name=image_name).delete() except orm_exc.NoResultFound: cls._raise_not_found(app_id)
def upgrade(): op.add_column('assembly', sa.Column('workflow', models.YAMLEncodedDict(1024)))
def upgrade(): op.create_table( 'sensor', sa.Column('id', sa.Integer, primary_key=True, nullable=False), sa.Column('uuid', sa.String(length=36), nullable=False), sa.Column('created_at', sa.DateTime, default=timeutils.utcnow), sa.Column('updated_at', sa.DateTime, onupdate=timeutils.utcnow), sa.Column('project_id', sa.String(length=36)), sa.Column('user_id', sa.String(length=36)), sa.Column('name', sa.String(255)), sa.Column('sensor_type', sa.String(255)), sa.Column('value', sa.String(255)), sa.Column('timestamp', sa.DateTime), sa.Column('description', sa.String(255)), sa.Column('documentation', sa.String(255)), sa.Column('target_resource', sa.String(255)), ) op.create_table( 'operation', sa.Column('id', sa.Integer, primary_key=True, nullable=False), sa.Column('uuid', sa.String(length=36), nullable=False), sa.Column('created_at', sa.DateTime, default=timeutils.utcnow), sa.Column('updated_at', sa.DateTime, onupdate=timeutils.utcnow), sa.Column('name', sa.String(100)), sa.Column('description', sa.String(255)), sa.Column('project_id', sa.String(36)), sa.Column('user_id', sa.String(36)), sa.Column('tags', sa.Text), sa.Column('documentation', sa.Text), sa.Column('target_resource', sa.Text)) op.create_table( 'image', sa.Column('id', sa.Integer, primary_key=True, nullable=False), sa.Column('uuid', sa.String(36), nullable=False), sa.Column('created_at', sa.DateTime, default=timeutils.utcnow), sa.Column('updated_at', sa.DateTime, onupdate=timeutils.utcnow), sa.Column('name', sa.String(100)), sa.Column('description', sa.String(255)), sa.Column('source_uri', sa.String(1024)), sa.Column('project_id', sa.String(36)), sa.Column('user_id', sa.String(36)), sa.Column('tags', sa.Text), sa.Column('state', sa.String(12)), sa.Column('base_image_id', sa.String(length=36)), sa.Column('created_image_id', sa.String(length=36)), sa.Column('image_format', sa.String(length=12)), sa.Column('source_format', sa.String(length=36)), ) op.create_table( 'extension', sa.Column('id', sa.Integer, primary_key=True, nullable=False), sa.Column('uuid', sa.String(length=36), nullable=False), sa.Column('created_at', sa.DateTime, default=timeutils.utcnow), sa.Column('updated_at', sa.DateTime, onupdate=timeutils.utcnow), sa.Column('project_id', sa.String(36)), sa.Column('user_id', sa.String(36)), sa.Column('description', sa.String(255)), sa.Column('name', sa.String(100)), sa.Column('version', sa.String(16)), sa.Column('documentation', sa.String(255)), # NOTE(stannie): tags will be added in a dedicated table ) op.create_table( 'plan', sa.Column('id', sa.Integer, primary_key=True, nullable=False), sa.Column('uuid', sa.String(length=36), nullable=False), sa.Column('created_at', sa.DateTime, default=timeutils.utcnow), sa.Column('updated_at', sa.DateTime, onupdate=timeutils.utcnow), sa.Column('project_id', sa.String(length=36)), sa.Column('user_id', sa.String(length=36)), sa.Column('raw_content', models.YAMLEncodedDict(2048)), sa.Column('description', sa.String(length=255)), sa.Column('name', sa.String(255)), sa.Column('deploy_keys_uri', sa.String(length=1024)), ) op.create_table( 'assembly', sa.Column('id', sa.Integer, primary_key=True, nullable=False), sa.Column('uuid', sa.String(length=36), nullable=False), sa.Column('created_at', sa.DateTime, default=timeutils.utcnow), sa.Column('updated_at', sa.DateTime, onupdate=timeutils.utcnow), sa.Column('name', sa.String(100)), sa.Column('description', sa.String(255)), sa.Column('project_id', sa.String(36)), sa.Column('user_id', sa.String(36)), sa.Column('tags', sa.Text), sa.Column('plan_id', sa.Integer, sa.ForeignKey('plan.id'), nullable=False), sa.Column('status', sa.String(length=36)), sa.Column('trigger_id', sa.String(length=36)), sa.Column('trust_id', sa.String(length=255)), sa.Column('application_uri', sa.String(length=1024)), ) op.create_table( 'pipeline', sa.Column('id', sa.Integer, primary_key=True, nullable=False), sa.Column('uuid', sa.String(length=36), nullable=False), sa.Column('created_at', sa.DateTime, default=timeutils.utcnow), sa.Column('updated_at', sa.DateTime, onupdate=timeutils.utcnow), sa.Column('name', sa.String(100)), sa.Column('description', sa.String(255)), sa.Column('project_id', sa.String(36)), sa.Column('user_id', sa.String(36)), sa.Column('tags', sa.Text), sa.Column('plan_id', sa.Integer, sa.ForeignKey('plan.id'), nullable=False), sa.Column('workbook_name', sa.String(length=255)), sa.Column('trigger_id', sa.String(length=36)), sa.Column('trust_id', sa.String(length=255)), ) op.create_table( 'execution', sa.Column('id', sa.Integer, primary_key=True, nullable=False), sa.Column('uuid', sa.String(length=36), nullable=False), sa.Column('pipeline_id', sa.Integer, sa.ForeignKey('pipeline.id')), sa.Column('created_at', sa.DateTime, default=timeutils.utcnow), sa.Column('updated_at', sa.DateTime, onupdate=timeutils.utcnow), ) op.create_table( 'infrastructure_stack', sa.Column('id', sa.Integer, primary_key=True, nullable=False), sa.Column('uuid', sa.String(length=36), nullable=False), sa.Column('created_at', sa.DateTime, default=timeutils.utcnow), sa.Column('updated_at', sa.DateTime, onupdate=timeutils.utcnow), sa.Column('name', sa.String(100)), sa.Column('description', sa.String(255)), sa.Column('project_id', sa.String(36)), sa.Column('user_id', sa.String(36)), sa.Column('tags', sa.Text), sa.Column('image_id', sa.String(36), nullable=False), sa.Column('heat_stack_id', sa.String(36)), ) op.create_table( 'component', sa.Column('id', sa.Integer, primary_key=True, nullable=False), sa.Column('uuid', sa.String(length=36), nullable=False), sa.Column('created_at', sa.DateTime, default=timeutils.utcnow), sa.Column('updated_at', sa.DateTime, onupdate=timeutils.utcnow), sa.Column('name', sa.String(100)), sa.Column('component_type', sa.String(100)), sa.Column('description', sa.String(255)), sa.Column('project_id', sa.String(36)), sa.Column('user_id', sa.String(36)), sa.Column('tags', sa.Text), sa.Column('assembly_id', sa.Integer, sa.ForeignKey('assembly.id')), sa.Column('parent_component_id', sa.Integer, sa.ForeignKey('component.id')), sa.Column('resource_uri', sa.String(length=1024)), sa.Column('heat_stack_id', sa.String(36)), ) op.create_table( 'service', sa.Column('id', sa.Integer, primary_key=True, nullable=False), sa.Column('uuid', sa.String(36), nullable=False), sa.Column('created_at', sa.DateTime, default=timeutils.utcnow), sa.Column('updated_at', sa.DateTime, onupdate=timeutils.utcnow), sa.Column('name', sa.String(100)), sa.Column('description', sa.String(255)), sa.Column('project_id', sa.String(36)), sa.Column('user_id', sa.String(36)), sa.Column('service_type', sa.String(100)), sa.Column('read_only', sa.Integer, default=0), sa.Column('tags', sa.Text), )
def upgrade(): op.add_column('app', sa.Column('raw_content', models.YAMLEncodedDict(2048)))