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
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
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
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'))
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
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', )
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='修改时间')