标准运维原子自助开发帮助文档

导出PDF

一、原子组件 是什么?

标准运维项目的核心设计思想是将运维操作场景拆分成一个个独立的原子组件,然后提供方便组织管理这些原子组件的交互界面,将这些原子组件组织成各个运维场景的操作流程。这里提到的原子组件的参数收集部分在标准运维项目内部称为gTags,负责展示原子组件的参数录入及展示。如图1所示,是一个用于实现Job执行作业原子组件(gTags)的前端页面。

图1:Job-执行作业原子组件(gTags)参数输入页面

二、原子组件(gTags) 的构成

通过前面的介绍,很快就会发现原子组件(gTags)跟前端中的form表单非常类似, 其实原子组件(gTags)的实现思想就是form表单,但还是有些区别,原子组件(gTags)与form表单主要有以下几点区别:

(1) 原子组件(gTags)中基于每个输入项都是可勾选的,勾选之后的参数可以在任务创建页面填写;

(2) 原子组件(gTags)中的输入项并不是普通的form表单输入项,有些是复杂的插件,比如带搜索功能的下拉框或autocomplete,目前标准运维项目主要采用kendo框架定义用于前端输入的插件,用户也可以配置自己的bootstrap插件等;

(3) 原子组件(gTags)中输入项校验规则不一样,勾选之后的输入项不进行校验,包含变量引用的输入项也不校验,其它的情形与普通form表单字段校验一样;

(4) 原子组件(gTags)模块还负责将前端页面输入的参数生成最终的执行模块可直接使用的执行计划,以及执行计划的展示。

标准运维项目中实现的原子组件(gTags)主要由两部分构成:

(1)输入项(field);负责输入字段的前端展示,交互,勾选和获取用户输入;

(2)容器(container):负责输入字段的组织管理,生成执行计划,查看执行计划,重试参数组装等接口管理。

三、快速上手-自定义 原子组件(gTags)

a. 派生新类

class GetRequestTag(GtagsContainer):

pass

b. 定义属性

name = “GET请求组件”

exec_map_key = “get_request”

my_input_field1 = fields.SimpleInputTag(tag_code=”my_input_field1”, name=u”输入项一”)

至此:一个新tag就定义出来了,完整代码如下

class GetRequestTag(GtagsContainer):

name = u”自定义组件”

exec_map_key = “get_request”

my_input_field1 = fields.SimpleURLTag(tag_code=”my_input_field1”, name=u”输入项一”)

c. 定义执行任务类,并将gTag的执行类设置成定义的任务类(注意:任务类名不要随便修改)

pass

d. 注册原子组件(gTags)到数据库

python manage.py auto_registry_gtags

打开标准运维任务模板编辑页面可看到新添加的tag,用新添加的tag建一个模板就可以开始进行执行功能测试了

四、原子组件(gTags) API

(1)输入字段类API说明

原子组件(gTags)中输入字段类主要负责输入项的前端展示,交互,校验和最终输入值的提取。原子组件(gtags)输入字段类型主要支持两种类型,一种是dango .form .widget 提供的字段类型,另外一种是kendo插件,所有kendo插件的生成配置也是基于django.form.widget的属性实现,用于可以根据这种实现方式 定义出自己的bootstrap插件。 gcloud.gtags_framework.fields中提供了常用输入字段类的定义。比如定义一个django.form.widgets.NumberInput用于让用户输入数字,也可以使用kendo NumericTextBox插件作为数字输入框。比如定义

class KendoNumericIntegerBoxTag(KendoWidgetTag):

role = “numerictextbox”

def init(self, **kwargs): super(KendoNumericIntegerBoxTag, self).__init__(**kwargs) self._attributes.update({ “data-decimals”: 1, “data-format”: “n0”, “data-placeholder”: u”请输入整数” })

属性:

tag_code: 输入字段的key,字符串,必填项

name: 用于展示输入字段的名称(如果不填,则默认为tag_code)

default:默认值

name_as_parameter:勾选到模板变量时展示的名字,默认为name

widget_cls:生成输入项的widget类(参考django.form.widgets)

方法:

__call__:用于生成输入项展示页面(包含label,输入项dom节点或插件以及勾选功能)

render:用于生成输入项dom节点或插件

实例化参数:

attrs:用户生成输入项dom及节点或插件的属性,比如生成kendo插件需要有data-role属性

常用类说明:

RawField:完全使用自定义模板定义输入项页面

WidgetTagInputField:基于django.form.widget的输入项字段实现,可以自定义widget_cls或widget实现输入项dom使用指定的django.form.widget生成

SimpleInputTag:对应widget_cls为forms.TextInput

SimplePasswordTag: 对应widget_cls为forms.PasswordInput

KendoWidgetTag: 使用kendo插件生成输入项的基类,定义时用role字段指定生成特定的kendo插件

KendoDateTimeTag:使用kendo日期时间控件生成输入项的类,用于获取日期时间

KendoNumericIntegerBoxTag:使用kendo数字输入框生成输入项的类,只允许输入整数

(2)kendo插件字段datasource配置

字段类型采用kendo插件往往需要配置datasource,针对KendoWidgetTag类型有两种datasource配置方式,一种是直接配置dict/list作为datasource,另外一种是执行一个callable对象,输入字段展示时会调用该callable对象,并传入渲染上下文作为参数。

(3)原子组件-gTags类API说明

gTags类GtagsContainer用于实现功能组件的抽象化表示,负责输入项字段的组织,任务执行参数生成以及执行参数查看页面以及重试展示参数组装等功能组件相关的功能。

属性:

__doc__:用于展示tag的帮助信息

name:tag的名称

container_template:展示tag的模板

execute_plan_template:展示执行计划的模板

task_cls:对应的任务执行类

方法:

__new__:生成tag的页面的接口, 封装render方法实现

render: 生成tag的页面的接口

recreate:生成对应的任务重试时展示出来的参数

get_execute_plan:获取执行计划

render_execute_plan:展示执行计划

visualize_execute_plan:执行计划的数据可视化,被render_execute_plan调用,作为钩子提供给用户,使得用于实现执行计划展示时,仅提供一个用于可读的orderdict即可,从而不用单独添加执行计划展示模板

get_base_exec_info:用于获取执行计划时,获取公用的部分信息

get_tag_value:工具函数,用于获取指定tag的最终值

(4)如何使用自定义输入项

gTag的输入字段主要由三部分组成,最左侧的label,中间的输入dom节点或插件,最右边的勾选框。

在应用中可能会出现所有的input类型的元素和kendo插件都不能满足输入的交互需求,这时可能需要自己设计输入插件,可以通过重载render方法实现。实现时需要注意如下几点:

  • a. 使用自定义模板实现输入dom节点或插件的展示
  • b. 展示时需要展示默认值或者已经输入了的值
  • c. 自定义的插件需要将值绑定到value上,通过data-bind=”value:value”指定

(5)如何自定义输入项展示模板

有时用户想自定义通用模板的左中右布局样式,可以通过重新定义base实现

(6)如何自定义tag展示模板

自定义展示可以用自定义的container_template属性实现

(7)原子组件(gTags)及其参数输入项的发现机制

原子组件(gTags)发现机制主要分为两部分:(1)定义时自动注册到Singleton类中(2)引入机制。

定义时自动注册到Singleton,通过metaclass.__new__实现。引入机制是在django apps加载完毕后,ready事件中扫描每个installed_app的目录结构,如果发现collections目录,则将collections下所有文件import一次,确保所有的tag的定义在初始化的时候就注册到Singleton中。

(8)自动注册命令 auto_registry_gtags

自动注册命令使用的django command,执行时会将Singleton中的每个tag使用models.get_or_create添加到数据库。

也可以可以通过 http://dev.open.ied.com:8000/gtags_framework/auto_registry_gtags/触发该command执行。

本文档是否对您有帮助?