コード例 #1
0
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),
    )
コード例 #2
0
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)
        )
コード例 #3
0
ファイル: parameter.py プロジェクト: prayalankar2/solum
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
コード例 #4
0
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)),
    )
コード例 #5
0
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
コード例 #6
0
ファイル: plan.py プロジェクト: paulczar/solum
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
コード例 #7
0
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)
コード例 #8
0
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)))
コード例 #10
0
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),
    )
コード例 #11
0
def upgrade():
    op.add_column('app', sa.Column('raw_content',
                                   models.YAMLEncodedDict(2048)))