From 2369ebb4d23625e7a0728614d849dc5dfca1b802 Mon Sep 17 00:00:00 2001 From: "StarsL.cn" Date: Tue, 26 Jul 2022 04:37:58 +0800 Subject: [PATCH] Releases v0.8.1 --- flask-consul/units/jms/sync_jms.py | 37 +++++++++++++++++++----- vue-consul/src/main.js | 2 +- vue-consul/src/views/dashboard/index.vue | 12 ++++++++ vue-consul/src/views/jms/index.vue | 5 ++-- 4 files changed, 46 insertions(+), 10 deletions(-) diff --git a/flask-consul/units/jms/sync_jms.py b/flask-consul/units/jms/sync_jms.py index 416f568..07bf402 100755 --- a/flask-consul/units/jms/sync_jms.py +++ b/flask-consul/units/jms/sync_jms.py @@ -11,6 +11,7 @@ def create_node(jms_url,headers,now,node_id,cloud,account): data = {'count': '失败','update':now,'status':50000,'msg':f'同步资源失败!{detail}'} consul_kv.put_kv(f'ConsulManager/record/jms/{cloud}/{account}', data) cloud_group_dict = consul_kv.get_value(f'ConsulManager/assets/{cloud}/group/{account}') + cloud_group_dict['nogroup'] = '未分组' for k,v in cloud_group_dict.items(): if v not in [i['value'] for i in jms_node_list]: response = requests.request("POST", node_url, headers=headers, data = json.dumps({'value': v})) @@ -25,17 +26,18 @@ def update_jms_ecs(jms_url,headers,new_node_dict,node_id,cloud,account,ecs_info, reget_ecs_list = requests.request("GET", f'{ecs_url}?node={node_id}', headers=headers).json() jms_ecs_dict = {i['ip']:{'name':i['hostname'],'id':i['id'],'comment':i['comment'],'node':i['nodes_display'][0]} for i in reget_ecs_list} ecs_list = consul_manager.get_instances(f'{cloud}_{account}_ecs')['instances'] + ecs_ip_dict = {i['address']:i['meta'][0]['name'] for i in ecs_list} ecs_dict = {i['ID']:{'name':i['meta'][0]['name'],'ip':i['address'],'ent':i['meta'][0]['group'],'ostype':i['meta'][0]['os'],'region':i['meta'][0]['region'],'vendor':i['meta'][0]['vendor']} for i in ecs_list} del_ecs_list = [v['id'] for k,v in jms_ecs_dict.items() if k not in [i['ip'] for i in ecs_dict.values()]] for del_ecs in del_ecs_list: response = requests.request("DELETE", f'{ecs_url}{del_ecs}/', headers=headers) - print(' 【JMS】删除主机:',del_ecs,response.status_code,flush=True) + print(' 【JMS】删除主机:',del_ecs,response.status_code,flush=True) #增加/更新缺少的主机 for k,v in ecs_dict.items(): ip = v['ip'] iname = v['name'] - nodes = new_node_dict[v['ent']] + nodes = new_node_dict.get(v['ent'],new_node_dict['未分组']) ostype = v['ostype'] comment = f"{v['vendor']} {account} {v['region']} {k}" protocols = ecs_info[ostype][0] @@ -60,13 +62,33 @@ def update_jms_ecs(jms_url,headers,new_node_dict,node_id,cloud,account,ecs_info, "comment": comment } if ip in jms_ecs_dict.keys(): - if jms_ecs_dict[ip]['name'] != iname or jms_ecs_dict[ip]['node'].split('/')[-1] != v['ent']: + jms_group = '无' if jms_ecs_dict[ip]['node'].split('/')[-1] == '未分组' else jms_ecs_dict[ip]['node'].split('/')[-1] + if jms_ecs_dict[ip]['name'] != iname or jms_group != v['ent']: response = requests.request("PUT", f"{ecs_url}{jms_ecs_dict[ip]['id']}/", headers=headers, data = json.dumps(payload)) - print(' 【JMS】update:主机名:',response.json()['hostname'],response.status_code,flush=True) + print(' 【JMS】update:主机名:',response.json()['hostname'],response.status_code,flush=True) else: response = requests.request("POST", ecs_url, headers=headers, data = json.dumps(payload)) - print(' 【JMS】add:主机名:',response.json()['hostname'],response.status_code,flush=True) - return 'ok' + print(' 【JMS】add:主机名:',iname,ip,f"【{response.json()['hostname']},{response.status_code}】",flush=True) + return ecs_ip_dict + +#从JMS中删除IP重复的主机 +def del_jms_repip(jms_url,headers,node_id,ecs_ip_dict): + ecs_url = f"{jms_url}/api/v1/assets/assets/" + temp_jmsecs_dict = {} + rep_jmsecs_list = [] + new_jms_list = requests.request("GET", f'{ecs_url}?node={node_id}', headers=headers).json() + for i in new_jms_list: + if i['ip'] not in temp_jmsecs_dict: + temp_jmsecs_dict[i['ip']] = {'name':i['hostname'],'id':i['id'],'ip':i['ip']} + else: + rep_jmsecs_list.append(temp_jmsecs_dict[i['ip']]) + rep_jmsecs_list.append({'name':i['hostname'],'id':i['id'],'ip':i['ip']}) + + for j in rep_jmsecs_list: + if j['name'] != ecs_ip_dict.get(j['ip']): + del_ecs = j['id'] + response = requests.request("DELETE", f'{ecs_url}{del_ecs}/', headers=headers) + print(' 【JMS】删除IP重复且名称不在ECS列表的主机:',j['name'],j['ip'],response.status_code,flush=True) #从JMS中删除没有主机的组 def del_node(jms_url,headers,now,node_id,cloud,account): @@ -98,6 +120,7 @@ def run(cloud,account): headers = {'Content-Type': 'application/json','Authorization': f"Token {token}"} new_node_dict = create_node(jms_url,headers,now,node_id,cloud,account) - update_jms_ecs(jms_url,headers,new_node_dict,node_id,cloud,account,ecs_info,custom_ecs_info) + ecs_ip_dict = update_jms_ecs(jms_url,headers,new_node_dict,node_id,cloud,account,ecs_info,custom_ecs_info) + del_jms_repip(jms_url,headers,node_id,ecs_ip_dict) del_node(jms_url,headers,now,node_id,cloud,account) print('【JOB】===>',cloud,account,'JMS同步完成',flush=True) diff --git a/vue-consul/src/main.js b/vue-consul/src/main.js index be5d714..0e5bc20 100644 --- a/vue-consul/src/main.js +++ b/vue-consul/src/main.js @@ -46,7 +46,7 @@ Object.keys(filters).forEach(key => { }) Vue.config.productionTip = false -Vue.prototype.VER = 'v0.7.1' +Vue.prototype.VER = 'v0.8.1' new Vue({ el: '#app', diff --git a/vue-consul/src/views/dashboard/index.vue b/vue-consul/src/views/dashboard/index.vue index 0fb06d2..2135be6 100644 --- a/vue-consul/src/views/dashboard/index.vue +++ b/vue-consul/src/views/dashboard/index.vue @@ -4,6 +4,18 @@ StarsL.cn + + +

v0.8.1

+

新增自动同步云资产到JumpServer的功能!

+

当我们在云厂商界面新增、删除、修改ECS后,都会及时的自动同步到JumpServer中。

+

并且在JumpServer各资产的备注中会记录丰富的资产信息,方便查询筛选登录。

+

同步页面提供了云账号ECS资产整体的系统、资源、状态信息。

+

优化了站点监控管理页面的用户操作体验,方便增加各类型的站点监控。

+

关机的云主机也会同步到consul,并加上tag标识,默认不会接入Prometheus。

+

优化后端镜像大小,更新大量前端依赖,修复漏洞。

+
+

v0.7.0

diff --git a/vue-consul/src/views/jms/index.vue b/vue-consul/src/views/jms/index.vue index 861d3e9..6d309d3 100644 --- a/vue-consul/src/views/jms/index.vue +++ b/vue-consul/src/views/jms/index.vue @@ -13,7 +13,7 @@ 接入JumpServer - +
接入JumpServer   如何填写 @@ -87,7 +87,7 @@ - 注意:JumpServer中已有的同名主机不会同步。 + 注意:每个云账号必须在JumpServer创建一个新节点!

JumpServer中已有的同名主机不会同步,日志可查看同名信息。