From 710bbadd4a080d4e804e0860ef20b2d243277861 Mon Sep 17 00:00:00 2001 From: starsliao Date: Sat, 22 Jul 2023 16:49:06 +0800 Subject: [PATCH] =?UTF-8?q?=E5=85=BC=E5=AE=B9jumpserver3.x,=E6=94=AF?= =?UTF-8?q?=E6=8C=81=E5=90=8C=E6=AD=A5ECS=E5=88=B0jms3.x?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- flask-consul/units/jms/sync_jms.py | 26 ++++++++++++++++++++------ flask-consul/views/jms.py | 4 ++-- vue-consul/src/views/jms/index.vue | 8 +++++++- 3 files changed, 29 insertions(+), 9 deletions(-) diff --git a/flask-consul/units/jms/sync_jms.py b/flask-consul/units/jms/sync_jms.py index 4dccefc..06db484 100755 --- a/flask-consul/units/jms/sync_jms.py +++ b/flask-consul/units/jms/sync_jms.py @@ -22,7 +22,7 @@ def create_node(jms_url,headers,now,node_id,cloud,account): new_node_dict = {i['value']:i['id'] for i in reget_node_list} return new_node_dict -def update_jms_ecs(jms_url,headers,new_node_dict,node_id,cloud,account,ecs_info,custom_ecs_info): +def update_jms_ecs(jms_ver,jms_url,headers,new_node_dict,node_id,cloud,account,ecs_info,custom_ecs_info): #比较云主机与JMS中对应node的主机列表,删除jms中多余的主机 ecs_url = f"{jms_url}/api/v1/assets/assets/" reget_ecs_list = requests.request("GET", f'{ecs_url}?node={node_id}', headers=headers).json() @@ -56,11 +56,24 @@ def update_jms_ecs(jms_url,headers,new_node_dict,node_id,cloud,account,ecs_info, protocols = custom_info[ostype][0] platform = ostype.title() admin_user = custom_info[ostype][1] - payload = { - "ip": ip, - "hostname": iname, + if jms_ver == 'V3': + ecs_url = f"{jms_url}/api/v1/assets/hosts/" + proto,port = protocols[0].split('/') + payload = { "address": ip, "name": iname, + "protocols": [{"name": proto,"port": port}], + "platform": '5' if platform == 'Windows' else '1', + "is_active": True, + "domain": "", + "accounts":[{"template": admin_user.strip()}], + "nodes": [nodes], + "comment": comment + } + else: + payload = { + "ip": ip, + "hostname": iname, "protocols": protocols, "platform": platform, "is_active": True, @@ -68,7 +81,7 @@ def update_jms_ecs(jms_url,headers,new_node_dict,node_id,cloud,account,ecs_info, "admin_user": admin_user.strip(), "nodes": [nodes], "comment": comment - } + } try: if ip in jms_ecs_dict.keys(): jms_group = '无' if jms_ecs_dict[ip]['node'].split('/')[-1] == '未分组' else jms_ecs_dict[ip]['node'].split('/')[-1] @@ -131,11 +144,12 @@ def run(cloud,account): jms = consul_kv.get_value('ConsulManager/jms/jms_info') jms_url = jms.get('url') + jms_ver = jms.get('ver','V2') token = myaes.decrypt(jms.get('token')) headers = {'Content-Type': 'application/json','Authorization': f"Token {token}"} new_node_dict = create_node(jms_url,headers,now,node_id,cloud,account) - ecs_ip_dict = 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_ver,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) logger.info(f'【JOB】===>{cloud},{account},JMS同步完成') diff --git a/flask-consul/views/jms.py b/flask-consul/views/jms.py index 12b3d53..2b58e0b 100644 --- a/flask-consul/views/jms.py +++ b/flask-consul/views/jms.py @@ -84,7 +84,7 @@ class Jms(Resource): winuid = ecs_info['windows'][-1] token = myaes.decrypt(jms_info['token']) custom_ecs_json = json.dumps(custom_ecs_info, indent=8) if custom_ecs_info != {} else '' - jms_config = {'url': jms_info['url'], 'token': token, + jms_config = {'url': jms_info['url'], 'token': token, 'ver': jms_info.get('ver','V2'), 'linuxport': linuxport, 'linuxuid': linuxuid, 'winport': winport, 'winuid': winuid, 'custom_ecs_info':custom_ecs_json} else: @@ -95,7 +95,7 @@ class Jms(Resource): args = parser.parse_args() jms_config = args['jms_config'] token = myaes.encrypt(jms_config['token']) - jms_info = {'url': jms_config['url'], 'token': token} + jms_info = {'url': jms_config['url'], 'token': token, 'ver': jms_config.get('ver','V2')} consul_kv.put_kv('ConsulManager/jms/jms_info', jms_info) ecs_info = {"linux": [[f"ssh/{jms_config['linuxport']}"],jms_config['linuxuid']], "windows": [[f"rdp/{jms_config['winport']}"],jms_config['winuid']]} diff --git a/vue-consul/src/views/jms/index.vue b/vue-consul/src/views/jms/index.vue index d8336dc..4f0a140 100644 --- a/vue-consul/src/views/jms/index.vue +++ b/vue-consul/src/views/jms/index.vue @@ -22,6 +22,12 @@ + + + + + + @@ -107,7 +113,7 @@ import { getJmsList, getJmsConfig, postJmsConfig, postJmsSwitch, postJmsSync } f export default { data() { return { - jms_config: { url: '', token: '', linuxport: '22', linuxuid: '', winport: '3389', winuid: '', custom_ecs_info: '' }, + jms_config: { ver: 'V2', url: '', token: '', linuxport: '22', linuxuid: '', winport: '3389', winuid: '', custom_ecs_info: '' }, listLoading: false, dialogFormVisible: false, query: { vendor: '', account: '' },