77 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			Python
		
	
	
			
		
		
	
	
			77 lines
		
	
	
		
			2.5 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 get_ecs_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()
 | |
|         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_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)
 |