class VMGenerateApprovalOrd(models.Model): """ vmware申请数据 """ approval = models.ForeignKey("VMGenerateApproval", related_name='vm_generate_ord') env_type = models.CharField(_("环境类型"), max_length=64) apply_deploy_place = models.CharField(_("部署地点"), max_length=64, null=True, blank=True) apply_os_version = models.CharField(_("系统版本"), max_length=64, null=True, blank=True) apply_node_type = models.CharField(_("节点类型"), max_length=64, null=True, blank=True) apply_network_area = models.CharField(_("网络区域"), max_length=64, null=True, blank=True) apply_application = JsonField(default=[]) apply_software = JsonField(default=[]) apply_cpu = models.SmallIntegerField() apply_memory_gb = models.IntegerField() apply_disk_gb = models.IntegerField() apply_expiration = models.CharField(max_length=64, null=True, blank=True) apply_system = JsonField(_("操作系统"), default={}) apply_filesystem = JsonField(_("文件系统"), default={}) class Meta: verbose_name = "申请工单表" verbose_name_plural = verbose_name def __str__(self): return "%s的详细表单" % (self.approval.approval_number)
class NodeInstance(models.Model): """ 节点任务实例 """ STATUS = [ (0, _('开始')), (1, _('参数赋值')), (2, _('开始执行')), (3, _('执行完毕')), (4, _('输出参数回填')), (5, _('结束')), (6, _('异常')), ] node_instance_name = models.CharField(u"节点实例名称", max_length=255, null=True, blank=True) blue_instance = models.ForeignKey(BlueInstance, related_name='node_instance', null=True, on_delete=models.SET_NULL) node_input_entrance = JsonField(u"节点输入口", default={}) blue_node = models.ForeignKey(BlueNodeDefinition, null=True, on_delete=models.SET_NULL) status = models.SmallIntegerField(choices=STATUS, default=0) node_returns = JsonField(default={}) url = models.CharField(max_length=255, null=True, blank=True) startTime = models.DateTimeField(auto_now_add=True) endTime = models.DateTimeField(null=True, blank=True)
class BluePrintDefinition(BlueComponentEntityDefinition): """ 蓝图定义表 """ KEEP_STATUS = { (0, _('草稿')), # 初始状态 (1, _('已保存')), # 保存蓝图后状态 } VALID_STATUS = {(0, _('未验证')), (1, _('蓝图有效')), (2, _('蓝图无效'))} category = models.ForeignKey(BlueCategory, null=True, on_delete=models.SET_NULL) is_valid = models.SmallIntegerField(choices=VALID_STATUS, default=0, null=True) # 手工维护 created_user = models.ForeignKey(ExUser, on_delete=models.SET_NULL, null=True) tmp = models.IntegerField(null=True, default=None) keep_status = models.SmallIntegerField(choices=KEEP_STATUS, default=0) input = JsonField(default={}) output = JsonField(default={}) is_verify = models.BooleanField(default=False) # 验证节点参数 link_data = JsonField(default={}) avaliable_node_sort = JsonField(default=[]) # 节点执行顺序 def __str__(self): return self.name
class VMGenerateApproveOrd(models.Model): """ vm生成审批表数据 """ approve = models.ForeignKey("VMGenerateApprove", related_name='vm_generate_approve_ord') env_type = models.CharField(_("环境类型"), max_length=64) deploy_location = models.CharField(_("部署地点"), max_length=64, null=True, blank=True) appro_os_version = models.CharField(_("系统版本"), max_length=64, null=True, blank=True) node_type = models.CharField(_("节点类型"), max_length=64, null=True, blank=True) network_area = models.CharField(_("网络区域"), max_length=64, null=True, blank=True) application = JsonField(default=[]) software = JsonField(default=[]) target_cpu_cores = models.SmallIntegerField() target_mem_gb = models.IntegerField() add_datadisk_gb = models.IntegerField() expiration = models.CharField(max_length=64, null=True, blank=True) system_type = JsonField(_("操作系统"), default={}) apply_filesystem = JsonField(_("文件系统"), default={}) # 用户自定义软件挂载点和所需磁盘空间大小 custom_path = JsonField(default={}) custom_disk = JsonField(default={}) custom_add_path = JsonField(default={}) appro_resource = JsonField(default=[]) configuration_resource_information = JsonField(_('配置资源信息'), default={})
class System(models.Model): """ 应用系统表 """ name = models.CharField(max_length=20) full_name = models.CharField(max_length=100) primary_dev = models.CharField(max_length=100, null=True) other_dev = JsonField(default=[]) primary_op = models.CharField(max_length=100, null=True) other_op = JsonField(default=[]) app_level = models.CharField(max_length=20, default='') dr_level = models.CharField(max_length=20, default='') topo_graph = models.TextField(null=True)
class BlueEngineTask(models.Model): blue_instance_number = models.CharField(_("蓝图实例编号"), max_length=255, null=True, blank=True) blue_engine_log = models.TextField() access_module_key = models.CharField(_("接入模块KEY"), max_length=255, null=True, blank=True) blue_print_id = models.SmallIntegerField(_("蓝图定义"), null=True, blank=True) user = models.ForeignKey(to=ExUser, null=True, blank=True, on_delete=models.SET_NULL) task_progress = models.CharField(_("进度"), max_length=64, null=True, blank=True) result_data = JsonField(default={}) startTime = models.DateTimeField(auto_now_add=True) task_elapsed_time = models.CharField(_("任务耗时"), max_length=64, null=True, blank=True)
class BlueInstance(models.Model): """ 蓝图实例表 """ STATUS = [ (0, _('开始')), (1, _('运行中')), (2, _('已完成')), (3, _('异常')), ] blue_instance_number = models.CharField(u"蓝图实例编号", unique=True, max_length=255, null=True, blank=True) blue_print = models.ForeignKey(BluePrintDefinition, null=True, on_delete=models.SET_NULL) user = models.ForeignKey(ExUser, null=True, on_delete=models.SET_NULL) # 申请人 status = models.SmallIntegerField(choices=STATUS, default=0) avaliable_node_sort = JsonField(default=[]) # 节点执行顺序 startTime = models.DateTimeField(auto_now_add=True) endTime = models.DateTimeField(null=True, blank=True) current_node = models.ForeignKey(BlueNodeDefinition, null=True, on_delete=models.SET_NULL, default=None)
class ServerParamsMG(models.Model): CH_SETTING_TYPE = ( ('SELECT', '下拉参数'), ('INPUT', '输入参数') ) server_id = models.SmallIntegerField(verbose_name=_("所属服务")) params_type = models.CharField(_("参数类型"), max_length=64, choices=CH_SETTING_TYPE) params_name = models.CharField(_("参数简称"), max_length=64, help_text="英文,与页面名称保持一致") parent_id = models.SmallIntegerField(_('父级ID'), help_text='用于区分级别', null=True, blank=True) params_name_display = models.CharField(_("参数名称"), max_length=255, help_text="中文,与页面名称保持一致", null=True, blank=True) values_en = models.CharField(_("参数值"), max_length=100, help_text="英文标识符,不可修改", null=True, blank=True) values_display = models.CharField(_("显示值"), max_length=255, help_text="中文,可修改", null=True, blank=True) param_option = JsonField(_("参数额外字段"), default={}) param_comment = models.TextField(_("参数注释"), null=True, blank=True) is_editable = models.BooleanField(default=True, help_text="默认为可修改") class Meta: verbose_name = '服务参数' # unique_together = ('server', 'params_type', 'name', 'values') # unique_together = ('server_id', 'params_type', 'params_name', 'values_en') def __str__(self): # queryset = self.objects.filter(parent_id=None) # return queryset.values("params_name_display", "params_name") return "%s-%s-%s" % (self.params_name_display, self.params_name, self.values_display)
class ServerParams(models.Model): CH_SETTING_TYPE = ( ('SELECT', '选择参数'), ('INPUT', '输入参数') ) CH_INTERFACE_TYPE = ( ('INT','整形'), ('STR', '字符串'), ('LIST', '列表/数组'), ('DICT', '字典') ) PARAMS_PURPOSE_TYPE = ( ('PAGE_PARAM', '页面'), ('INTERFACE_PARAM', '接口') ) server_id = models.SmallIntegerField(verbose_name=_("所属服务")) params_type = models.CharField(_("参数类型"), max_length=64) params_purpose = models.CharField(_("参数用途"), max_length=64, choices=PARAMS_PURPOSE_TYPE, default='PAGE_PARAM') params_name = models.CharField(_("参数简称"), max_length=100, help_text="英文,与页面名称保持一致", unique=True) params_name_display = models.CharField(_("参数名称"), max_length=255, help_text="中文,与页面名称保持一致", null=True, blank=True) param_option = JsonField(_("参数额外字段"), default={}) param_comment = models.TextField(_("参数注释"), null=True, blank=True) is_editable = models.BooleanField(default=True) class Meta: verbose_name = '服务参数' verbose_name_plural = verbose_name def __str__(self): return "%s_%s" % (self.params_name_display, self.params_name)
class VMGenerateApproval(models.Model): """ vmware资源申请表 """ APPROVAL_STATUS = ( (0, u"未提交/退回"), (1, u"已提交"), (2, u"已审批"), (3, u"处理中"), (4, u"已完成"), (-1, u"错误未处理"), ) title = models.CharField(_("申请标题"), max_length=64, null=True, blank=True) approval_number = models.CharField(_("申请编号"), max_length=100, null=True, blank=True) status = models.SmallIntegerField(choices=APPROVAL_STATUS, default=0) # deploy_place = models.CharField(_("部署地点"), max_length=64) env_type = models.CharField(_("环境类型"), max_length=64, null=True, blank=True) # os_type = models.CharField(_("操作系统"), max_length=64) applicant = models.ForeignKey(verbose_name=_("申请人"), to=ExUser, null=True, blank=True) apply_msg = models.TextField(_("申请信息"), null=True, blank=True) apply_date = models.DateTimeField(_(u"申请时间"), default=now, help_text="默认时间为创建时间") workflow_number = models.CharField(_("所属流程编号"), max_length=255, null=True, blank=True) blue_ins_number = models.CharField(_("所属蓝图实例编号"), max_length=255, null=True, blank=True) map_relation = JsonField(_("映射关系"), default={}) @property def status_display(self): return self.get_status_display() def __str__(self): return self.approval_number
class WorkflowLog(models.Model): pInstance_number = models.CharField(_("流程实例编号"), max_length=64) suggestion = models.CharField(_("处理意见"), max_length=1000, null=True, blank=True) participant = models.CharField(_('处理人'), max_length=50, blank=True, null=True) taskInstanceId = models.CharField(_('当前任务实例id'), max_length=32, blank=True, null=True) intervene_type_id = models.IntegerField(_('记录类型'), default=0, help_text='0.申请记录,1.审批记录', null=True, blank=True) business_data = JsonField(default=[]) business_map_relation = JsonField(default=[]) business_blue_info = JsonField(default={}, null=True, blank=True) creator = models.CharField(_(u'创建人'), max_length=50, help_text="关联的是user", null=True, blank=True) createTime = models.DateTimeField(_(u"创建时间"), auto_now_add=True) updateTime = models.DateTimeField(_(u"更新时间"), null=True, blank=True, auto_now=True) is_deleted = models.BooleanField(_(u'已删除'), default=False) class Meta: verbose_name = '实例流转操作日志' verbose_name_plural = verbose_name def __str__(self): return self.pInstance_number
class VMGenerateApprove(models.Model): APPROVE_STATUS = ( (0, u"未提交/退回"), (1, u"已提交"), (2, u"已审批"), (3, u"处理中"), (4, u"已完成"), (-1, u"错误未处理"), ) title = models.CharField(_("审批标题"), max_length=64, null=True, blank=True) blue_ins_number = models.CharField(_("所属蓝图实例编号"), max_length=255, null=True, blank=True) approval_number = models.CharField(_("申请编号"), max_length=100, null=True, blank=True) approve_number = models.CharField(_("审批编号"), max_length=100, null=True, blank=True) workflow_number = models.CharField(max_length=100, null=True, blank=True) workflow_note_ins_id = models.SmallIntegerField(null=True, blank=True) status = models.SmallIntegerField(choices=APPROVE_STATUS, default=0) # deploy_place = models.CharField(_("部署地点"), max_length=64) # env_type = models.CharField(_("环境类型"), max_length=64) # os_type = models.CharField(_("操作系统"), max_length=64) aprover = models.CharField(verbose_name=_("审批人"), max_length=64, null=True, blank=True) approve_msg = models.TextField(_("审批信息"), null=True, blank=True) approve_date = models.DateTimeField(_(u"审批时间"), default=now, help_text="默认时间为创建时间") approve_result = JsonField(_("审批结果"), default={}) map_relation = JsonField(_("映射关系"), default={})
class ServerMatchingRule(models.Model): CH_MATCHING_TYPE = ( ('AND', '和'), ('OR', '或') ) # param = models.ForeignKey(verbose_name=_("参数对象"), to=ServerParams, related_name="server_matching_rule", null=True, # blank=True) # param_name = models.CharField(_("参数名称"), max_length=64, null=True, blank=True) param_id = models.SmallIntegerField(_("参数ID")) param_of_server_id = models.SmallIntegerField(_("参数来源服务"), null=True, blank=True) param_value_id = JsonField(_("参数值ID"), default=[]) # param_value = JsonField(_("参数值"), default=[]) comment = JsonField(_("备注"), default={}) param_matching_pattern = models.CharField(_("参数匹配方式"), max_length=64, choices=CH_MATCHING_TYPE, default="AND", null=True, blank=True) class Meta: verbose_name = "服务参数匹配规则" verbose_name_plural = verbose_name # unique_together = ("param_name", "param_value") def __str__(self): ins = ServerParams.objects.filter(id=self.param_id).first() return "%s的匹配规则" % (ins.params_name_display)
class BlueAccessModuleParamsInstance(models.Model): access_module_key = models.CharField(_("接入模块KEY"), max_length=255, null=True, blank=True) blue_print = models.SmallIntegerField(_("蓝图定义"), null=True, blank=True) blue_instance_number = models.CharField(_("蓝图实例编号"), max_length=255, null=True, blank=True) user = models.ForeignKey(to=ExUser, null=True, blank=True, on_delete=models.SET_NULL) business_data = JsonField(_("业务数据"), default={}) startTime = models.DateTimeField(auto_now_add=True)
class MatchedCondition(models.Model): matching_rule = models.ForeignKey(verbose_name=_("匹配条件的匹配对象"), to=ServerMatchingRule,on_delete=models.CASCADE, related_name="matched_condition", null=True, blank=True) matching_param = models.ForeignKey(verbose_name=_("匹配参数对象"), to=ServerParams, on_delete=models.SET_NULL, related_name="matching_param_condition", null=True, blank=True) # matching_param_value = models.CharField(_("匹配条件参数值"), max_length=64, null=True, blank=True) matching_param_value_id = models.SmallIntegerField(_("匹配条件参数值ID"), null=True, blank=True) comment = JsonField(_("备注"), default={}) class Meta: verbose_name = "服务参数匹配条件" verbose_name_plural = verbose_name def __str__(self): ins = ServerParams.objects.filter(id=self.matching_rule.param_id).first() return "%s匹配规则的条件" % (ins.params_name_display)
class TaskInstance(models.Model): # taskInstanceId = models.IntegerField(_(u"任务实例ID")) id = models.AutoField(_("任务实例ID"), primary_key=True) pInstanceId = models.ForeignKey(to=ProcessInstance, verbose_name="对应的流程实例", related_name="task_instance") pDefinitionId = models.ForeignKey(to=ProcessDefinition, verbose_name="流程定义的名称") # businessKey = models.CharField(u"业务数据主键", max_length=64) # businessKey = models.ForeignKey(to=BusinessInfo, null=True, blank=True) businessKey = models.CharField(verbose_name="业务主键", null=True, blank=True, max_length=64) tDefinitionId = models.ForeignKey(to=TaskDefinition, verbose_name="任务定义") taskName = models.CharField(u"任务名称", max_length=64) taskNode = models.ForeignKey(to=TaskNode, verbose_name="对应流程节点名称", null=True, blank=True) assignee = JsonField(default=[]) startTime = models.CharField(u"开始时间", max_length=80, default=now, help_text="默认为当前时间", null=True, blank=True) endTime = models.CharField(u"结束时间", null=True, blank=True, max_length=80) duration = models.IntegerField(u"任务执行时长", null=True, blank=True, help_text="任务执行时长,单位毫秒") taskStatus = models.PositiveIntegerField( u"任务执行状态", default=0, help_text="任务状态0:任务未开启;1:任务开启中,2 任务执行成功,3:任务执行失败") comment = models.CharField(u"备注", max_length=500, null=True, blank=True) # is_deleted = models.BooleanField(u"任务是否删除", default=False, help_text="默认不删除") class Meta: verbose_name = "任务实例" verbose_name_plural = verbose_name def __str__(self): return str(self.id)
class ExGroup(Group): """ 自定义扩展组模型 """ MEM_TYPE_CHOICES = ( ('staff', 'Staff'), ('service', 'Service'), ) comment = models.CharField(max_length=160, blank=True, null=True) member_type = models.CharField(max_length=10, choices=MEM_TYPE_CHOICES, default='staff') managers = models.ManyToManyField('ExUser', related_name="mana_group_set", related_query_name="mana_group") # managers = models.ManyToManyField('ExUser', through="Membership") menu = JsonField(default=[])
class BlueNodeDefinition(models.Model): """ 蓝图节点表(接口) """ blue_print = models.ForeignKey(BluePrintDefinition, related_name="blue_nodes") name = models.CharField(max_length=100, default=None) # 填写接口name key = models.CharField(max_length=10, default=None, null=True) # 前段需要显示字段, 保存当前id is_verify = models.BooleanField(default=False) # 验证节点参数 is_maintain = models.BooleanField(default=False) # 是否维护中 component_type = models.SmallIntegerField(choices=COMPONENT_TYPE, default=0) # 组件类型 component_data = JsonField(default={}) downstream_node = models.ManyToManyField("BlueNodeDefinition", related_name="down_nodes", blank=True) create_time = models.DateTimeField(auto_now_add=True) update_time = models.DateTimeField(null=True, auto_now=True) def __str__(self): return self.name
class J2TemplFile(models.Model): """ Jinja2模板实例表 """ src = models.CharField(max_length=100) dest = models.CharField(max_length=100) host = models.CharField(max_length=20) owner = models.CharField(max_length=20, null=True) group = models.CharField(max_length=20, null=True) mode = models.CharField(max_length=20, null=True) var_dict = JsonField(default={}) @property def file_attr(self): dc = dict() if self.owner: dc['owner'] = self.owner if self.group: dc['group'] = self.group if self.mode: dc['mode'] = self.mode return dc
class DataDict(models.Model): """ 应用参数及动态表单选项 """ CH_SETTING_TYPE = ( ('PARAM', 'parameter'), ('OPTION', 'field options') ) app = models.CharField(max_length=20) setting_type = models.CharField(max_length=20, choices=CH_SETTING_TYPE) name = models.CharField(max_length=100) value = models.CharField(max_length=100) display = models.CharField(max_length=255, null=True) ext_attr = JsonField(default={}) objects = models.Manager() params = ParamManager() options = OptionManager() class Meta: unique_together = ('app', 'setting_type', 'name', 'value') def __unicode__(self): return "_%s_%s_%s" % (self.app, self.setting_type, self.name)