2022-11-18 19:50:41 +00:00
|
|
|
#!/usr/bin/python3
|
|
|
|
import requests,json
|
|
|
|
from units import consul_kv
|
|
|
|
from config import consul_token,consul_url,vendors,regions
|
|
|
|
headers = {'X-Consul-Token': consul_token}
|
|
|
|
geturl = f'{consul_url}/agent/services'
|
|
|
|
delurl = f'{consul_url}/agent/service/deregister'
|
|
|
|
puturl = f'{consul_url}/agent/service/register'
|
|
|
|
def w2consul(vendor,account,region,redis_dict):
|
|
|
|
service_name = f'{vendor}_{account}_redis'
|
|
|
|
params = {'filter': f'Service == "{service_name}" and "{region}" in Tags and Meta.account == "{account}"'}
|
|
|
|
try:
|
|
|
|
consul_redis_iid_list = requests.get(geturl, headers=headers, params=params).json().keys()
|
|
|
|
except:
|
|
|
|
consul_redis_iid_list = []
|
|
|
|
|
|
|
|
#在consul中删除云厂商不存在的redis
|
|
|
|
for del_redis in [x for x in consul_redis_iid_list if x not in redis_dict.keys()]:
|
|
|
|
dereg = requests.put(f'{delurl}/{del_redis}', headers=headers)
|
|
|
|
if dereg.status_code == 200:
|
2022-12-06 17:25:09 +00:00
|
|
|
logger.info(f"code: 20000, data: {account}-删除成功!")
|
2022-11-18 19:50:41 +00:00
|
|
|
else:
|
2022-12-06 17:25:09 +00:00
|
|
|
logger.info(f"code: 50000, data: {dereg.status_code}:{dereg.text}")
|
2022-11-18 19:50:41 +00:00
|
|
|
off,on = 0,0
|
|
|
|
for k,v in redis_dict.items():
|
|
|
|
iid = k
|
|
|
|
#对consul中关机的redis做标记。
|
2022-11-24 19:09:57 +00:00
|
|
|
if v['status'] in ['SHUTDOWN','Unavailable','Inactive','Released','非运行中']:
|
2022-11-18 19:50:41 +00:00
|
|
|
off = off + 1
|
2022-11-22 10:09:32 +00:00
|
|
|
tags = ['OFF', v['itype'], v['ver'], region]
|
2022-11-18 19:50:41 +00:00
|
|
|
stat = 'off'
|
|
|
|
else:
|
|
|
|
on = on + 1
|
2022-11-22 10:09:32 +00:00
|
|
|
tags = ['ON', v['itype'], v['ver'], region]
|
2022-11-18 19:50:41 +00:00
|
|
|
stat = 'on'
|
|
|
|
custom_redis = consul_kv.get_value(f'ConsulManager/assets/sync_redis_custom/{iid}')
|
|
|
|
port = custom_redis.get('port')
|
|
|
|
ip = custom_redis.get('ip')
|
|
|
|
if port == None:
|
|
|
|
port = v['port']
|
|
|
|
if ip == None:
|
2022-11-22 10:09:32 +00:00
|
|
|
ip = v['domain']
|
2022-11-18 19:50:41 +00:00
|
|
|
instance = f'{ip}:{port}'
|
|
|
|
data = {
|
|
|
|
'id': iid,
|
|
|
|
'name': service_name,
|
|
|
|
'Address': ip,
|
|
|
|
'port': port,
|
|
|
|
'tags': tags,
|
|
|
|
'Meta': {
|
|
|
|
'iid': iid,
|
|
|
|
'name': v['name'],
|
|
|
|
'region': regions[vendor].get(region,'未找到'),
|
|
|
|
'group': v['group'],
|
|
|
|
'instance': instance,
|
|
|
|
'account': account,
|
|
|
|
'itype': v['itype'],
|
|
|
|
'vendor': vendors.get(vendor,'未找到'),
|
|
|
|
'mem': v['mem'],
|
|
|
|
'ver': v['ver'],
|
2022-11-22 10:09:32 +00:00
|
|
|
'ip':v['ip'],
|
|
|
|
'exp':v['exp'],
|
2022-11-18 19:50:41 +00:00
|
|
|
'stat': stat
|
|
|
|
},
|
|
|
|
"check": {
|
|
|
|
"tcp": f"{ip}:{port}",
|
|
|
|
"interval": "60s"
|
|
|
|
}
|
|
|
|
}
|
|
|
|
reg = requests.put(puturl, headers=headers, data=json.dumps(data))
|
|
|
|
if reg.status_code == 200:
|
|
|
|
pass
|
|
|
|
else:
|
2022-12-06 17:25:09 +00:00
|
|
|
logger.info(f"{account}:code: 5000, data: {reg.status_code}:{reg.text}")
|
2022-11-18 19:50:41 +00:00
|
|
|
return off,on
|