ConsulManager/flask-consul/units/consul_kv.py

105 lines
3.6 KiB
Python

# -*- coding:utf-8 -*-
import requests,json,sys,os
from base64 import b64decode
from config import consul_token,consul_url
sys.path.append(os.path.dirname(os.path.abspath(__file__)))
#import myaes
headers = {'X-Consul-Token': consul_token}
def get_value(path):
url = f'{consul_url}/kv/{path}?raw'
response = requests.get(url, headers=headers)
response.encoding='utf-8'
if response.status_code == 200:
return response.json()
else:
return {}
def get_kv_dict(path):
url = f'{consul_url}/kv/{path}?recurse'
response = requests.get(url, headers=headers)
response.encoding='utf-8'
if response.status_code == 200 and response.text != '':
info = response.json()
kv_dict = {i['Key']:json.loads(b64decode(i['Value']).decode('utf-8')) for i in info if i['Value'] != None}
if kv_dict != {}:
return kv_dict
else:
return {}
else:
return {}
def get_keys_list(path):
url = f'{consul_url}/kv/{path}?keys'
response = requests.get(url, headers=headers)
response.encoding='utf-8'
if response.status_code == 200:
return response.json()
else:
return []
def put_kv(path,value):
url = f'{consul_url}/kv/{path}'
payload = json.dumps(value,ensure_ascii=False).encode("utf-8")
response = requests.put(url, headers=headers, data=payload)
return response.json()
def del_key(path):
url = f'{consul_url}/kv/{path}'
response = requests.delete(url, headers=headers)
if response.status_code == 200:
return response.json()
else:
return None
def del_key_all(path):
url = f'{consul_url}/kv/{path}?recurse=true'
response = requests.delete(url, headers=headers)
if response.status_code == 200:
return response.json()
else:
return None
def get_res_services(job_id):
cloud,account,itype,region = job_id.split('/')
service = f'{cloud}_{account}_{itype}'
region = f'and "{region}" in Tags'
url = f'{consul_url}/agent/services?filter=Service == "{service}" {region}'
response = requests.get(url, headers=headers)
if response.status_code == 200:
info = response.json()
res_list = [i['Meta'] for i in info.values()]
return {'code': 20000,'res_list': res_list}
else:
return {'code': 50000, 'data': f'{response.status_code}:{response.text}'}
def get_services_meta(services_name):
url = f'{consul_url}/agent/services?filter=Service == "{services_name}"'
response = requests.get(url, headers=headers)
if response.status_code == 200:
info = response.json()
ecs_list = [i['Meta'] for i in info.values()]
return {'code': 20000,'ecs_list': ecs_list}
else:
return {'code': 50000, 'data': f'{response.status_code}:{response.text}'}
def get_services_list_by_region(services_name,region):
region = f'and "{region}" in Tags and "ON" in Tags'
url = f'{consul_url}/agent/services?filter=Service == "{services_name}" {region}'
response = requests.get(url, headers=headers)
if response.status_code == 200:
info = response.json()
res_list = info.keys()
return res_list
else:
return []
def get_aksk(cloud,account):
import myaes
aksk_dict = get_value(f'ConsulManager/assets/{cloud}/aksk/{account}')
ak = myaes.decrypt(aksk_dict['ak'])
sk = myaes.decrypt(aksk_dict['sk'])
return ak, sk
def put_aksk(cloud,account,ak,sk):
import myaes
encrypt_aksk = {'ak': myaes.encrypt(ak), 'sk': myaes.encrypt(sk)}
return put_kv(f'ConsulManager/assets/{cloud}/aksk/{account}', encrypt_aksk)