Skip to content

Commit 710bbad

Browse files
committed
兼容jumpserver3.x,支持同步ECS到jms3.x
1 parent 1744974 commit 710bbad

3 files changed

Lines changed: 29 additions & 9 deletions

File tree

flask-consul/units/jms/sync_jms.py

Lines changed: 20 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ def create_node(jms_url,headers,now,node_id,cloud,account):
2222
new_node_dict = {i['value']:i['id'] for i in reget_node_list}
2323
return new_node_dict
2424

25-
def update_jms_ecs(jms_url,headers,new_node_dict,node_id,cloud,account,ecs_info,custom_ecs_info):
25+
def update_jms_ecs(jms_ver,jms_url,headers,new_node_dict,node_id,cloud,account,ecs_info,custom_ecs_info):
2626
#比较云主机与JMS中对应node的主机列表,删除jms中多余的主机
2727
ecs_url = f"{jms_url}/api/v1/assets/assets/"
2828
reget_ecs_list = requests.request("GET", f'{ecs_url}?node={node_id}', headers=headers).json()
@@ -56,19 +56,32 @@ def update_jms_ecs(jms_url,headers,new_node_dict,node_id,cloud,account,ecs_info,
5656
protocols = custom_info[ostype][0]
5757
platform = ostype.title()
5858
admin_user = custom_info[ostype][1]
59-
payload = {
60-
"ip": ip,
61-
"hostname": iname,
59+
if jms_ver == 'V3':
60+
ecs_url = f"{jms_url}/api/v1/assets/hosts/"
61+
proto,port = protocols[0].split('/')
62+
payload = {
6263
"address": ip,
6364
"name": iname,
65+
"protocols": [{"name": proto,"port": port}],
66+
"platform": '5' if platform == 'Windows' else '1',
67+
"is_active": True,
68+
"domain": "",
69+
"accounts":[{"template": admin_user.strip()}],
70+
"nodes": [nodes],
71+
"comment": comment
72+
}
73+
else:
74+
payload = {
75+
"ip": ip,
76+
"hostname": iname,
6477
"protocols": protocols,
6578
"platform": platform,
6679
"is_active": True,
6780
"domain": "",
6881
"admin_user": admin_user.strip(),
6982
"nodes": [nodes],
7083
"comment": comment
71-
}
84+
}
7285
try:
7386
if ip in jms_ecs_dict.keys():
7487
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):
131144

132145
jms = consul_kv.get_value('ConsulManager/jms/jms_info')
133146
jms_url = jms.get('url')
147+
jms_ver = jms.get('ver','V2')
134148
token = myaes.decrypt(jms.get('token'))
135149
headers = {'Content-Type': 'application/json','Authorization': f"Token {token}"}
136150

137151
new_node_dict = create_node(jms_url,headers,now,node_id,cloud,account)
138-
ecs_ip_dict = update_jms_ecs(jms_url,headers,new_node_dict,node_id,cloud,account,ecs_info,custom_ecs_info)
152+
ecs_ip_dict = update_jms_ecs(jms_ver,jms_url,headers,new_node_dict,node_id,cloud,account,ecs_info,custom_ecs_info)
139153
del_jms_repip(jms_url,headers,node_id,ecs_ip_dict)
140154
del_node(jms_url,headers,now,node_id,cloud,account)
141155
logger.info(f'【JOB】===>{cloud},{account},JMS同步完成')

flask-consul/views/jms.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -84,7 +84,7 @@ def get(self,stype):
8484
winuid = ecs_info['windows'][-1]
8585
token = myaes.decrypt(jms_info['token'])
8686
custom_ecs_json = json.dumps(custom_ecs_info, indent=8) if custom_ecs_info != {} else ''
87-
jms_config = {'url': jms_info['url'], 'token': token,
87+
jms_config = {'url': jms_info['url'], 'token': token, 'ver': jms_info.get('ver','V2'),
8888
'linuxport': linuxport, 'linuxuid': linuxuid,
8989
'winport': winport, 'winuid': winuid, 'custom_ecs_info':custom_ecs_json}
9090
else:
@@ -95,7 +95,7 @@ def post(self,stype):
9595
args = parser.parse_args()
9696
jms_config = args['jms_config']
9797
token = myaes.encrypt(jms_config['token'])
98-
jms_info = {'url': jms_config['url'], 'token': token}
98+
jms_info = {'url': jms_config['url'], 'token': token, 'ver': jms_config.get('ver','V2')}
9999
consul_kv.put_kv('ConsulManager/jms/jms_info', jms_info)
100100
ecs_info = {"linux": [[f"ssh/{jms_config['linuxport']}"],jms_config['linuxuid']],
101101
"windows": [[f"rdp/{jms_config['winport']}"],jms_config['winuid']]}

vue-consul/src/views/jms/index.vue

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,12 @@
2222
<el-form-item label="JumpServer URL">
2323
<el-input v-model="jms_config.url" placeholder="http开头" style="width: 390px;" />
2424
</el-form-item>
25+
<el-form-item label="JumpServer 版本">
26+
<el-select v-model="jms_config.ver" placeholder="版本" style="width: 100px" class="filter-item">
27+
<el-option key="V2" label="V2" value="V2" />
28+
<el-option key="V3" label="V3" value="V3" />
29+
</el-select>
30+
</el-form-item>
2531
<el-form-item label="JumpServer Token">
2632
<el-input v-model="jms_config.token" type="password" placeholder="请输入Admin Token" style="width: 390px;" />
2733
</el-form-item>
@@ -107,7 +113,7 @@ import { getJmsList, getJmsConfig, postJmsConfig, postJmsSwitch, postJmsSync } f
107113
export default {
108114
data() {
109115
return {
110-
jms_config: { url: '', token: '', linuxport: '22', linuxuid: '', winport: '3389', winuid: '', custom_ecs_info: '' },
116+
jms_config: { ver: 'V2', url: '', token: '', linuxport: '22', linuxuid: '', winport: '3389', winuid: '', custom_ecs_info: '' },
111117
listLoading: false,
112118
dialogFormVisible: false,
113119
query: { vendor: '', account: '' },

0 commit comments

Comments
 (0)