Beispiel #1
0
class DeployMenu(db.Model, ModelMixin):
    __tablename__ = 'deploy_menus'

    id = db.Column(db.Integer, primary_key=True)
    # 属于哪个应用的菜单
    app_id = db.Column(db.Integer, db.ForeignKey('deploy_apps.id', ondelete='CASCADE'), nullable=True)
    # 菜单的显示名称
    name = db.Column(db.String(50))
    # 菜单的帮助及描述
    desc = db.Column(db.String(255))
    # 菜单展示的位置(发布: 1 / 更多: 2)
    position = db.Column(db.SmallInteger)
    # 执行结果展示方式 (页面实时输出: 1 / 仅通知成功与否: 2)
    display_type = db.Column(db.SmallInteger)
    # 执行的钩子(自定义命令)
    command = db.Column(db.Text)
    # 是否需要传入参数
    required_args = db.Column(db.Boolean)
    # 在执行前是否需要弹框确认
    required_confirm = db.Column(db.Boolean)

    apps = db.relationship('App', secondary='deploy_app_menu_rel')

    def __repr__(self):
        return '<DeployMenu %r>' % self.name
Beispiel #2
0
class App(db.Model, ModelMixin):
    __tablename__ = 'deploy_apps'

    id = db.Column(db.Integer, primary_key=True)
    identify = db.Column(db.String(50))
    name = db.Column(db.String(50))
    desc = db.Column(db.String(255))
    group = db.Column(db.String(50))

    image_id = db.Column(db.Integer, db.ForeignKey('deploy_images.id'))

    image = db.relationship(Image)
    menus = db.relationship('DeployMenu', secondary='deploy_app_menu_rel')
    fields = db.relationship('DeployField', secondary='deploy_app_field_rel')

    def __repr__(self):
        return '<App %r>' % self.name
Beispiel #3
0
class DeployField(db.Model, ModelMixin):
    __tablename__ = 'deploy_fields'

    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(50))
    desc = db.Column(db.String(255))
    command = db.Column(db.Text)

    apps = db.relationship('App', secondary='deploy_app_field_rel')

    def __repr__(self):
        return '<DeployField %r>' % self.name
Beispiel #4
0
class HostExtend(db.Model, ModelMixin):
    __tablename__ = 'assets_hosts_extend'

    id = db.Column(db.Integer, primary_key=True)
    host_id = db.Column(db.Integer, db.ForeignKey('assets_hosts.id'))
    operate_system = db.Column(db.String(64))
    memory = db.Column(db.SmallInteger)
    cpu = db.Column(db.SmallInteger)
    disk = db.Column(db.SmallInteger)
    outer_ip = db.Column(db.String(128))
    inner_ip = db.Column(db.String(128))

    hosts = db.relationship(Host, backref=db.backref('host'))
Beispiel #5
0
class ImageTag(db.Model, ModelMixin):
    __tablename__ = 'deploy_image_tags'

    id = db.Column(db.Integer, primary_key=True)
    image_id = db.Column(db.Integer, db.ForeignKey('deploy_images.id'))
    name = db.Column(db.String(50))
    # sha256加密字符串,例如(sha256:a6647f8a2744cb8bfeff0a1b8623c8070dd92b0e6708ffa04ceb5349eaf492d6)
    digest = db.Column(db.String(64 + 7))
    created = db.Column(db.String(20))

    image = db.relationship(Image, backref=db.backref('tags'))

    def __repr__(self):
        return '<ImageTag %r>' % self.name
Beispiel #6
0
class User(db.Model, ModelMixin):
    __tablename__ = 'account_users'

    id = db.Column(db.Integer, primary_key=True)
    role_id = db.Column(db.Integer, db.ForeignKey('account_roles.id'))
    username = db.Column(db.String(50), unique=True, nullable=False)
    nickname = db.Column(db.String(50))
    password_hash = db.Column(db.String(100), nullable=False)
    email = db.Column(db.String(120))
    mobile = db.Column(db.String(30))
    is_supper = db.Column(db.Boolean, default=False)
    type = db.Column(db.String(20), default='系统用户')
    is_active = db.Column(db.Boolean, default=True)
    access_token = db.Column(db.String(32))
    token_expired = db.Column(db.Integer)

    role = db.relationship('Role')

    @property
    def password(self):
        raise AttributeError('password only can write')

    @password.setter
    def password(self, plain):
        self.password_hash = generate_password_hash(plain)

    @property
    def permissions(self):
        if self.is_supper:
            return set()
        return Role.get_permissions(self.role_id)

    def verify_password(self, password):
        return check_password_hash(self.password_hash, password)

    def check_deploy_permission(self, env_id, app_id):
        if self.is_supper:
            return True
        env_ids = self.role.env_ids.split(',') if self.role.env_ids else []
        app_ids = self.role.app_ids.split(',') if self.role.app_ids else []
        return str(env_id) in env_ids and str(app_id) in app_ids

    def __repr__(self):
        return '<User %r>' % self.username

    class Meta:
        ordering = ('-id', )
Beispiel #7
0
class HostExtend(db.Model, ModelMixin):
    __tablename__ = 'assets_hosts_extend'

    id = db.Column(db.Integer, primary_key=True)
    host_id = db.Column(db.Integer, db.ForeignKey('assets_hosts.id'))
    operate_system = db.Column(db.String(64))
    memory = db.Column(db.SmallInteger)
    cpu_core = db.Column(db.SmallInteger)
    avaliable_mem = db.Column(db.SmallInteger)
    avaliable_core = db.Column(db.SmallInteger)
    hosts = db.relationship(Host, backref=db.backref('host'))
    create_time = db.Column(db.DateTime,
                            server_default=func.now(),
                            comment='创建时间')
    # onupdate设置自动更改
    update_time = db.Column(
        db.DateTime,
        server_default=text('CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP'),
        comment='修改时间')