《事件推送网关:让cmdb告别“花瓶”》自发起至今已两月有余,在此期间咱们从无到有对cmdb的事件推送进行了充分的摸索,不断的踩坑填坑,现已基本实现了如下功能:python
基于cmdb,咱们对基础设施的管理有了依据,事件推送网关保证了基础设置的有序流动,咱们能够抽出更多的时间专一于上层的需求建设。web
系统隔离是一直是运维管理的一大难题,统一的esb总线来适配全部系统是不现实的,所以咱们但愿经过事件推送网关来间接打通。markdown
蓝鲸cmdb原生支持主机业务(资源池、主机)、业务拓扑(集群、拓扑)、组织架构(业务)等内容的新增、编辑、删除动做,触发回调自行开发的事件推送网关(gateway);架构
gateway接收蓝鲸cmdb事件推送的POST请求,合并请求后调用zabbix、jumpserver等系统的API,实现资产分组、建立,主机转移等操做;运维
cmdb的触发规则主要分为如下几类:ide
# 业务触发规则下的参数
{'action': 'create', 'obj_type': 'biz'}
{'action': 'update', 'obj_type': 'biz'}
{'action': 'delete', 'obj_type': 'biz'}
复制代码
# 集群触发规则下的参数
{'action': 'create', 'obj_type': 'set'}
{'action': 'update', 'obj_type': 'set'}
{'action': 'delete', 'obj_type': 'set'}
复制代码
# 模块触发规则下的参数
{'action': 'create', 'obj_type': 'module'}
{'action': 'update', 'obj_type': 'module'}
{'action': 'delete', 'obj_type': 'module'}
复制代码
# 主机转移触发的主机标识更新规则下的参数下
{'action': 'update', 'obj_type': 'hostidentifier'}
复制代码
注意:业务、集群、模块的更新操做,会自动触发主机标识更新,为何呢?post
由于主机标识更新是最小的原子操做,业务、集群、模块一旦更新,全部的主机的分组信息都须要作出一致性改变。所以,最终触发的操做以下:spa
# 业务更新
{'action': 'create', 'obj_type': 'biz'}
{'action': 'update', 'obj_type': 'hostidentifier'}
# 集群更新
{'action': 'create', 'obj_type': 'biz'}
{'action': 'update', 'obj_type': 'hostidentifier'}
# 模块更新
{'action': 'create', 'obj_type': 'biz'}
{'action': 'update', 'obj_type': 'hostidentifier'}
复制代码
考虑到cmdb事件推送POST的参数格式的多样性,给gateway解析参数带来了必定的复杂度,在此咱们特定义了一下cmdb触发规则:code
与Zabbix不一样的是,Jumpserver没有建立主机操做,由于默认状况下在后续文章《[蓝鲸实现多环境vsphere虚拟机交付]》中会自动在jumpserver中建立主机。经过这一流程,咱们默认全部的主机已经在jumpserver存在了。orm
在没有cmdb以前,咱们的基础设施管理是无序的,可是这也并不意味着有了cmdb就能将其管理的井井有理。所以,我认为最主要的核心思想仍是基于cmdb,让基础设施在各平台有效的流转起来,而不是让其真正成为一个“花瓶”。