TencentBlueKing / bk-nodeman

蓝鲸节点管理,可以对蓝鲸体系中的GSE Agent进行管理,包括状态查询、版本更新、配置管理、健康检查、进程管理等。
MIT License
50 stars 51 forks source link

feat: 订阅接口支持指定用户操作进程 #2297

Open Huayeaaa opened 1 month ago

Huayeaaa commented 1 month ago

背景

订阅接口支持指定用户操作进程

为什么需要

功能

你想要什么功能 image

功能实现

建议的方案

实现方案

功能自测

代码变更覆盖功能点需要自测并截图

功能点 1

描述代码变更涉及功能点及自测截图

功能点 2

描述代码变更涉及功能点及自测截图

...

Huayeaaa commented 1 month ago

支持指定用户操作进程

SaaS层面

根据之前对的方案:支持所有的插件操作 1.增加plugin_v2.PluginV2ViewSet.operate的参数; 例如host_id_operate_user_list;参数格式:[{"bk_host_id": 1, "operate_user": "user1"}, {"bk_host_id": 2, "operate_user": "user2"}····] 将host_id_operate_user_list作为传入创建订阅的参数,创建订阅接口需新增参数接收参数

后台创建订阅层面

1.服务模板 (HOST): "scope": {'bk_biz_id': 1, 'object_type': 'HOST', 'node_type': 'SERVICE_TEMPLATE', 'nodes': [{'bk_obj_id': 'SERVICE_TEMPLATE', 'bk_inst_id': 21}]

(SERVICE) :"scope":{"nodes":[{"bk_inst_id":3370,"bk_obj_id":"SERVICE_TEMPLATE"}],"bk_biz_id":123,"node_type":"SERVICE_TEMPLATE","object_type":"SERVICE"}}

2.集群模板 (HOST):"scope": {"bk_biz_id": 1, "object_type": "HOST", "node_type": "SET_TEMPLATE","nodes": [{'bk_obj_id': 'SERVICE_TEMPLATE', 'bk_inst_id': 21}]}

(SERVICE):"scope": {"nodes": [{ "bk_obj_id": "SET_TEMPLATE","bk_inst_id": 293}],"bk_biz_id": 108,"node_type": "SET_TEMPLATE", "object_type": "SERVICE"}

3.动态实例(拓扑) (HOST) "scope": {"bk_biz_id": 1, "object_type": "HOST", "node_type": "TOPO",nodes:[{'bk_obj_id': 'module', 'bk_inst_id': 130}]} (SERVICE) "scope": {"node_type":"TOPO","bk_biz_id":5000157,"object_type":"SERVICE","nodes":[{"bk_obj_id":"set","bk_inst_id":5061998}]}

"scope": {"nodes": [{ "bk_biz_id": 100849,"bk_obj_id": "set","bk_inst_id": 5061632}, { "bk_biz_id": 106, "bk_obj_id": "set", "bk_inst_id": 5061871 }], "bk_biz_id": 5005578,"node_type": "TOPO","object_type": "SERVICE"}

4.静态实例 "scope": {"bk_biz_id": None, "object_type": "HOST", "node_type": "INSTANCE",nodes:[{"bk_host_id": 111}]}

实现层面

0.对接(明确)需求人的细粒度,TA需要的是单台主机 or 服务实例 or 操作系统 or 业务层面 来指定用户?确定执行目标 1.单台主机-》:后台创建订阅指定用户的情况下;因为传递的是主机ID,考虑大量主机的情况下,用户是否愿意写这么多参数呢?还是使用默认值? 2.服务模板 & 集群模板 & 动态实例(拓扑) 都会传递业务,是否根据业务去传递用户呢?比如某个业务下的机器用户都是user00这种;还是根据操作系统:{“windows_account”: "administrator","linux_account": "user11"·····}

是否还有更好的设计思路 or 实现思路

对于已存在的订阅

对于已存在的订阅,用户也希望能指定用户操作: 调用update_subscription接口,传递scope和对应的操作粒度;先明确第0点,确认需求方的具体执行力度。

ivensu commented 1 month ago

0.对接(明确)需求人的细粒度,TA需要的是单台主机 或 服务实例 或 操作系统 或 业务层面 来指定用户?确定执行目标 1.单台主机-》:后台创建订阅指定用户的情况下;因为传递的是主机ID,考虑大量主机的情况下,用户是否愿意写这么多参数呢?还是使用默认值?

按插件下发任务中的单台目标主机的粒度指定执行账号(每个下发主机分别指定账号),不指定账号使用默认值,默认用之前的逻辑(linux默认应该是root,windows还不清楚默认是啥)

2.服务模板 & 集群模板 & 动态实例(拓扑) 都会传递业务,是否根据业务去传递用户呢?比如某个业务下的机器用户都是user00这种;还是根据操作系统:{“windows_account”: “administrator”,“linux_account”: “user11”·····}

这种批量场景,建议支持动态拓扑这个组指定账号,且填写账号时可区分操作系统类型指定不同的账号