pull/131/head
parent
2a4b593a48
commit
32bdcf4c6a
|
@ -6,6 +6,7 @@ from config import vendors
|
||||||
import json, traceback
|
import json, traceback
|
||||||
from .jobs import deljob, addjob, runjob, getjob
|
from .jobs import deljob, addjob, runjob, getjob
|
||||||
from units.config_log import *
|
from units.config_log import *
|
||||||
|
|
||||||
blueprint = Blueprint('jms', __name__)
|
blueprint = Blueprint('jms', __name__)
|
||||||
api = Api(blueprint)
|
api = Api(blueprint)
|
||||||
|
|
||||||
|
@ -15,13 +16,15 @@ parser.add_argument('jms_config',type=dict)
|
||||||
parser.add_argument('jms_sync', type=dict)
|
parser.add_argument('jms_sync', type=dict)
|
||||||
parser.add_argument('switch_dict', type=dict)
|
parser.add_argument('switch_dict', type=dict)
|
||||||
|
|
||||||
|
|
||||||
class Jms(Resource):
|
class Jms(Resource):
|
||||||
decorators = [token_auth.auth.login_required]
|
decorators = [token_auth.auth.login_required]
|
||||||
|
|
||||||
def get(self, stype):
|
def get(self, stype):
|
||||||
if stype == 'list':
|
if stype == 'list':
|
||||||
switch = consul_kv.get_value(f'ConsulManager/jms/jms_info')
|
switch = consul_kv.get_value(f'ConsulManager/jms/jms_info')
|
||||||
if switch == {}:
|
if switch == {}:
|
||||||
return({'code': 20000,'ecs_list':[],'vendor_list':[],'account_list':[]})
|
return {'code': 20000, 'ecs_list': [], 'vendor_list': [], 'account_list': []}
|
||||||
args = parser.parse_args()
|
args = parser.parse_args()
|
||||||
query_dict = json.loads(args['query_dict'])
|
query_dict = json.loads(args['query_dict'])
|
||||||
if query_dict['vendor'] != '':
|
if query_dict['vendor'] != '':
|
||||||
|
@ -66,10 +69,24 @@ class Jms(Resource):
|
||||||
count_sync = jms_job.get('count')
|
count_sync = jms_job.get('count')
|
||||||
nextime = getjob(f'{vendor}/{account}/jms').next_run_time.strftime("%m.%d/%H:%M")
|
nextime = getjob(f'{vendor}/{account}/jms').next_run_time.strftime("%m.%d/%H:%M")
|
||||||
sync = True
|
sync = True
|
||||||
ecs_list.append({'vendor':vendors[vendor],'account':account,'count_linux':count_linux,
|
ecs_list.append(
|
||||||
'count_win':count_win,'count_mem':f'{count_mem}GB','count_cpu':f'{count_cpu}核',
|
{
|
||||||
'count_ecs':count_ecs,'count_on':count_on,'count_off':count_off,'sync':sync,
|
'vendor': vendors[vendor],
|
||||||
'count_sync':count_sync,'interval':interval,'runtime':runtime,'nextime':nextime})
|
'account': account,
|
||||||
|
'count_linux': count_linux,
|
||||||
|
'count_win': count_win,
|
||||||
|
'count_mem': f'{count_mem}GB',
|
||||||
|
'count_cpu': f'{count_cpu}核',
|
||||||
|
'count_ecs': count_ecs,
|
||||||
|
'count_on': count_on,
|
||||||
|
'count_off': count_off,
|
||||||
|
'sync': sync,
|
||||||
|
'count_sync': count_sync,
|
||||||
|
'interval': interval,
|
||||||
|
'runtime': runtime,
|
||||||
|
'nextime': nextime,
|
||||||
|
}
|
||||||
|
)
|
||||||
vendor_list = sorted(list(set([i['vendor'] for i in ecs_list])))
|
vendor_list = sorted(list(set([i['vendor'] for i in ecs_list])))
|
||||||
account_list = sorted(list(set([i['account'] for i in ecs_list])))
|
account_list = sorted(list(set([i['account'] for i in ecs_list])))
|
||||||
return {'code': 20000, 'ecs_list': ecs_list, 'vendor_list': vendor_list, 'account_list': account_list}
|
return {'code': 20000, 'ecs_list': ecs_list, 'vendor_list': vendor_list, 'account_list': account_list}
|
||||||
|
@ -84,12 +101,20 @@ class Jms(Resource):
|
||||||
winuid = ecs_info['windows'][-1]
|
winuid = ecs_info['windows'][-1]
|
||||||
token = myaes.decrypt(jms_info['token'])
|
token = myaes.decrypt(jms_info['token'])
|
||||||
custom_ecs_json = json.dumps(custom_ecs_info, indent=8) if custom_ecs_info != {} else ''
|
custom_ecs_json = json.dumps(custom_ecs_info, indent=8) if custom_ecs_info != {} else ''
|
||||||
jms_config = {'url': jms_info['url'], 'token': token, 'ver': jms_info.get('ver','V2'),
|
jms_config = {
|
||||||
'linuxport': linuxport, 'linuxuid': linuxuid,
|
'url': jms_info['url'],
|
||||||
'winport': winport, 'winuid': winuid, 'custom_ecs_info':custom_ecs_json}
|
'token': token,
|
||||||
|
'ver': jms_info.get('ver', 'V2'),
|
||||||
|
'linuxport': linuxport,
|
||||||
|
'linuxuid': linuxuid,
|
||||||
|
'winport': winport,
|
||||||
|
'winuid': winuid,
|
||||||
|
'custom_ecs_info': custom_ecs_json,
|
||||||
|
}
|
||||||
else:
|
else:
|
||||||
jms_config = {}
|
jms_config = {}
|
||||||
return {'code': 20000, 'jms_config': jms_config}
|
return {'code': 20000, 'jms_config': jms_config}
|
||||||
|
|
||||||
def post(self, stype):
|
def post(self, stype):
|
||||||
if stype == 'config':
|
if stype == 'config':
|
||||||
args = parser.parse_args()
|
args = parser.parse_args()
|
||||||
|
@ -97,8 +122,10 @@ class Jms(Resource):
|
||||||
token = myaes.encrypt(jms_config['token'])
|
token = myaes.encrypt(jms_config['token'])
|
||||||
jms_info = {'url': jms_config['url'], 'token': token, 'ver': jms_config.get('ver', 'V2')}
|
jms_info = {'url': jms_config['url'], 'token': token, 'ver': jms_config.get('ver', 'V2')}
|
||||||
consul_kv.put_kv('ConsulManager/jms/jms_info', jms_info)
|
consul_kv.put_kv('ConsulManager/jms/jms_info', jms_info)
|
||||||
ecs_info = {"linux": [[f"ssh/{jms_config['linuxport']}"],jms_config['linuxuid']],
|
ecs_info = {
|
||||||
"windows": [[f"rdp/{jms_config['winport']}"],jms_config['winuid']]}
|
"linux": [[f"ssh/{jms_config['linuxport']}"], jms_config['linuxuid']],
|
||||||
|
"windows": [[f"rdp/{jms_config['winport']}"], jms_config['winuid']],
|
||||||
|
}
|
||||||
consul_kv.put_kv('ConsulManager/jms/ecs_info', ecs_info)
|
consul_kv.put_kv('ConsulManager/jms/ecs_info', ecs_info)
|
||||||
custom_ecs_info = jms_config['custom_ecs_info']
|
custom_ecs_info = jms_config['custom_ecs_info']
|
||||||
if custom_ecs_info != '':
|
if custom_ecs_info != '':
|
||||||
|
@ -132,6 +159,8 @@ class Jms(Resource):
|
||||||
vendor = {v: k for k, v in vendors.items()}[jms_sync['vendor']]
|
vendor = {v: k for k, v in vendors.items()}[jms_sync['vendor']]
|
||||||
account = jms_sync['account']
|
account = jms_sync['account']
|
||||||
nodeid = jms_sync['nodeid']
|
nodeid = jms_sync['nodeid']
|
||||||
|
if nodeid == '':
|
||||||
|
return {'code': 50000, 'data': f'新节点ID不能为空'}
|
||||||
interval = int(jms_sync['interval'])
|
interval = int(jms_sync['interval'])
|
||||||
consul_kv.put_kv(f'ConsulManager/jms/{vendor}/{account}/node_id', {'node_id': nodeid, 'interval': interval})
|
consul_kv.put_kv(f'ConsulManager/jms/{vendor}/{account}/node_id', {'node_id': nodeid, 'interval': interval})
|
||||||
|
|
||||||
|
@ -147,8 +176,16 @@ class Jms(Resource):
|
||||||
logger.error(f'{e}\n{traceback.format_exc()}\n【{vendor}/{account}】同步功能开启失败!')
|
logger.error(f'{e}\n{traceback.format_exc()}\n【{vendor}/{account}】同步功能开启失败!')
|
||||||
return {'code': 50000, 'data': f'【{vendor}/{account}】同步功能开启失败,请查看后端日志!'}
|
return {'code': 50000, 'data': f'【{vendor}/{account}】同步功能开启失败,请查看后端日志!'}
|
||||||
|
|
||||||
jms_job_dict = {'id':jms_job_id,'func':jms_job_func,'args':jms_job_args,'minutes':interval,
|
jms_job_dict = {
|
||||||
'trigger': 'interval','replace_existing': True}
|
'id': jms_job_id,
|
||||||
|
'func': jms_job_func,
|
||||||
|
'args': jms_job_args,
|
||||||
|
'minutes': interval,
|
||||||
|
'trigger': 'interval',
|
||||||
|
'replace_existing': True,
|
||||||
|
}
|
||||||
consul_kv.put_kv(f'ConsulManager/jms/jobs/{vendor}/{account}', jms_job_dict)
|
consul_kv.put_kv(f'ConsulManager/jms/jobs/{vendor}/{account}', jms_job_dict)
|
||||||
return {'code': 20000, 'data': f'【{vendor}/{account}】同步JumpServer功能开启!首次同步完成'}
|
return {'code': 20000, 'data': f'【{vendor}/{account}】同步JumpServer功能开启!首次同步完成'}
|
||||||
|
|
||||||
|
|
||||||
api.add_resource(Jms, '/api/jms/<stype>')
|
api.add_resource(Jms, '/api/jms/<stype>')
|
||||||
|
|
|
@ -107,8 +107,8 @@
|
||||||
<template slot="append">分钟</template>
|
<template slot="append">分钟</template>
|
||||||
</el-input>
|
</el-input>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item label="新节点ID">
|
<el-form-item required label="新节点ID">
|
||||||
<el-input v-model="jms_sync.nodeid" :required="true" />
|
<el-input v-model="jms_sync.nodeid" />
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<font size="3px" color="#ff0000">注意:每个云账号必须在JumpServer创建一个新节点!<br><br>JumpServer中已有的同名主机不会同步,日志可查看同名信息。</font>
|
<font size="3px" color="#ff0000">注意:每个云账号必须在JumpServer创建一个新节点!<br><br>JumpServer中已有的同名主机不会同步,日志可查看同名信息。</font>
|
||||||
</el-form>
|
</el-form>
|
||||||
|
|
Loading…
Reference in New Issue