class ServiceApi(Resource): def __init__(self): self.kuber = KubernetesRpcClient() @time_log def get(self, service_uuid): try: token = request.headers.get('token') token_ret = token_auth(token) except Exception, e: log.error('Token check error, reason=%s' % e) return request_result(201) if request.args.get('pod') == 'pod': parameters = token_ret.get('result') parameters['service_uuid'] = service_uuid parameters['rtype'] = 'pods_msg' context = context_data(token, service_uuid, "read") try: ret = self.kuber.pod_msg(context, parameters) except Exception, e: log.error('get the pods messages error, reason=%s' % e) return request_result(504) return request_result(0, ret)
def cloudhost_recovery(self, vm_uuid, token, source_ip, resource_uuid): # 注意,vm恢复时,需要将vm使用的云硬盘和网卡一并恢复 if self.billing_check is True: # 获取并检查用户余额,只有当余额大于0时才允许执行恢复操作 team_balance = self.ucenter_api.team_balance(token) if team_balance.get('status') != 0: log.error('Get balance info error, ' 'team_balance=%s' % (team_balance)) return request_result(601) else: balance = team_balance.get('result').get('balance') if float(balance) <= 0: return request_result(302) try: cloudhost_info = self.compute_db.cloudhost_info( vm_uuid)['cloudhost_info'] vm_name = cloudhost_info['vm_name'] vm_cpu = cloudhost_info['vm_cpu'] vm_mem = cloudhost_info['vm_mem'] vm_disk = cloudhost_info['vm_disk'] vm_nic = cloudhost_info['vm_nic'] except Exception, e: log.error('Database select error, reason=%s' % (e)) return request_result(404)
class ServicesApi(Resource): def __init__(self): self.kubernetes = KubernetesRpcClient() @time_log def post(self): try: token = request.headers.get('token') token_ret = token_auth(token) source_ip = request.headers.get('X-Real-IP') if source_ip is None: source_ip = request.remote_addr except Exception, e: log.error('Token check error, reason=%s' % e) return request_result(201) try: parameters = json.loads(request.get_data()) log.info('parameters body is: %s' % parameters) parameters['token'] = token token_rets = token_ret.get('result') if 'service_name' in token_rets.keys(): del token_rets['service_name'] parameters.update(token_rets) log.info('parameters body(1) is:%s' % parameters) if parameters.get('service_name') is None: return request_result(101) except Exception, e: log.error("parameters error,reason=%s" % e) return request_result(101)
def send_email(self, email_list, service_uuid): email = self.get_email_and_phone(service_uuid) if email.get('status') != 0: return request_result(404) email = email.get('result') log.info('send to the email is: %s' % email) usage = "" for i in email_list: usage = usage + "<tr><td>%s</td><td>%s</td><td>%s</td></tr>" % (i.get('service_name'), i.get('usage'), i.get('time')) html_body = ("<table bgcolor=\"#FF5151\" border=\"2\">" "<th>service name</th>" "<th>alarm message</th>" "<th>alarm time</th>" "%s" "</table>") % str(usage) data = { "to": email, "title": "服务告警啦", "text": None, "html": html_body } email_send = self.email_driver(data).get('status') if int(email_send) != 0: return request_result(601)
class DeleteManager(object): def __init__(self): self.service_db = ServiceDB() self.kuber = KubernetesDriver() self.billing = BillingResource() self.token_driver = TokenDriver() @operation_record(resource_type='app', action='logical_delete') def service_delete(self, context, token, source_ip, resource_uuid): log.info('the data(in) when delete service....is: %s' % context) try: context = self.service_db.get_service_name(context) except Exception, e: log.error('get the service name error, reason=%s' % e) return request_result(404) try: ret_volume = self.kuber.update_volume_status(context) if ret_volume is False: log.error('update the volume status error') return request_result(503) except Exception, e: log.error('update volume status error, reason is: %s' % e) return request_result(503)
def app_events_info(self, namespace): url = self.get_events_url+namespace+'/events' try: r = requests.get(url, headers=self.headers, verify=False, timeout=5) return request_result(0, r.text) except Exception, e: log.error('requests k8s api(events) error, reason=%s' % e) return request_result(103)
def rc_status_info(self, token=None): try: r = requests.get(self.get_pod_status_url, headers=self.headers, verify=False, timeout=5) log.debug('rc_status=%s' % r.text) return request_result(0, r.text) except Exception, e: log.error('requests k8s api error, reason=%s' % e) return request_result(103)
def create_apps(self, token, con, context, cost): log.info('the inner recover data is: %s' % context) try: to_kuber = self.elements_explain(context) except Exception, e: log.error('use the elements_explain error, reason is: %s' % e) return request_result(404)
def create_certify(self, context, parameters=None): try: rpc_body = rpc_data("certify_cre", context, parameters) return self.rbtmq.rpc_call_client(self.queue, self.timeout, rpc_body) except Exception, e: log.error('Rpc client exec error, reason=%s' % e) return request_result(598)
def service_name_get(self, context, parameters=None): try: rpc_body = rpc_data('name_check', context, parameters) return self.rbtmq.rpc_call_client(self.queue, self.timeout, rpc_body) except Exception, e: log.error('check the name if used or not error, reason is: %s' % e) return request_result(598)
def get_all_services(self, context, parameters=None): try: rpc_body = rpc_data("admin_services_get", context, parameters) return self.rbtmq.rpc_call_client(self.queue, self.timeout, rpc_body) except Exception, e: log.error('Rpc client exec error, reason=%s' % e) return request_result(598)
class CloudHostsApi(Resource): def __init__(self): self.compute_api = compute_manager.ComputeManagerAPI() @time_log def post(self): try: token = request.headers.get('token') token_auth(token) source_ip = request.headers.get('X-Real-IP') if source_ip is None: source_ip = request.remote_addr except Exception, e: log.warning('Token check error, token=%s, reason=%s' % (token, e)) return request_result(201) try: body = request.get_data() parameters = json.loads(body) except Exception, e: log.warning('Parameters error, body=%s, reason=%s' % (body, e)) return request_result(101)
class Certify(Resource): def __init__(self): self.certify = CertifyRpcClient() def post(self): try: token = request.headers.get('token') token_ret = token_auth(token) source_ip = request.headers.get('X-Real-IP') if source_ip is None: source_ip = request.remote_addr except Exception, e: log.error('Token check error, reason=%s' % e) return request_result(201) try: # 暂时数据上传格式:tls.crt在前, 中间关键字',tls.key:',最后key内容 data = request.get_data().split(',tls.key:') crt = data[0] key = data[1] base64.b64encode(crt) base64.b64encode(key) parameters = {'content': {'tls.crt': crt, 'tls.key': key}} parameters['token'] = token token_rets = token_ret.get('result') parameters.update(token_rets) except Exception, e: log.error('parameters error, reason is: %s' % e) return request_result(101)
def rolling_update(self, context): try: log.info('to rolling update, the data is: %s' % context) self.rbtmq.rpc_cast_client(self.queue, context) except Exception, e: log.error('Rpc client exec error, reason=%s' % e) return request_result(598)
def create_server(self, availzone_uuid, image_uuid, vm_name, nic_list, security_groups=None, keypair=None): ''' :param availzone_uuid: 目前亲测方法用的是可用域的名称,id暂不知可否使用 :param image_uuid: 镜像id :param vm_name: 实例名称 :param nic_list: 网络列表。[{'uuid':'net01-uuid'},{'uuid': 'net02-uuid'}] :param security_groups [{'name':''},{'name':''}]可选 :param key_name 可选 :return: .result为新建实例的object ''' try: op_result = self.conn.\ compute.create_server(name=vm_name, availability_zone=availzone_uuid, image_id=image_uuid, # security_groups=security_groups, networks=nic_list, # key_name=keypair, flavor_id="2" # str ) except Exception, e: log.error('create the cloudhost(op) error, reason is: %s' % e) return request_result(611)
def rpc_exec(self, rpc_body): try: return self.rpc_api.rpcapp_run(rpc_body) except Exception, e: log.error('RPC Server exec error: %s' % e) return request_result(599)
class SnapshotManager(object): def __init__(self): self.billing_check = conf.billing self.compute_db = compute_db.ComputeDB() self.compute_driver = compute_driver.ComputeDriver() def snapshot_create(self, team_uuid, project_uuid, user_uuid, snapshot_name, vm_uuid, comment, token, source_ip, resource_name): try: cloudhost_info = self.compute_db.cloudhost_info( vm_uuid)['cloudhost_info'] vm_name = cloudhost_info['vm_name'] vm_ip = cloudhost_info['vm_ip'] vm_cpu = cloudhost_info['vm_cpu'] vm_mem = cloudhost_info['vm_mem'] vm_disk = cloudhost_info['vm_disk'] vm_nic = cloudhost_info['vm_nic'] availzone_uuid = cloudhost_info['availzone_uuid'] availzone_name = cloudhost_info['availzone_name'] status = cloudhost_info['status'] except Exception, e: log.error('Database select error, reason=%s' % (e)) return request_result(404) try: name_check = self.compute_db.snapshot_name_check( snapshot_name, project_uuid, availzone_uuid)['name_check'] except Exception, e: log.error('Database select error, reason=%s' % (e)) return request_result(404)
def get_recycle_svc_count(self, parameters): try: count = self.service_db.recycle_svc_count(parameters)[0][0] except Exception, e: log.error('get the recover service count error, reason is: %s' % e) return request_result(404)
def get(self, service_uuid): try: token = request.headers.get('token') token_ret = token_auth(token) except Exception, e: log.error('Token check error, reason=%s' % e) return request_result(201)
def clouddisk_create(self, context, parameters=None): ''' :param context: {'token':string, 'source_ip':source_ip} :param parameters: {size=int, name=string, v_type=string, description=string, snapshot_uuid=string, source_volume_uuid=string} :return: ''' context = context_data(context.get('token'), 'vol_vol_pro_com', 'create', context.get('source_ip')) try: rpc_body = rpc_data("clouddisk_cre", context, parameters) return self.rbtmq.rpc_call_client(self.queue, self.timeout, rpc_body) except Exception, e: log.error('Rpc client exec error, reason=%s' % e) return request_result(598)
class CertifyUp(Resource): def __init__(self): self.certify = CertifyRpcClient() def put(self, certify_uuid): try: token = request.headers.get('token') token_ret = token_auth(token) source_ip = request.headers.get('X-Real-IP') if source_ip is None: source_ip = request.remote_addr except Exception, e: log.error('Token check error, reason=%s' % e) return request_result(201) try: data = request.get_data().split(',tls.key:') crt = data[0] key = data[1] parameters = {'content': {'tls.crt': crt, 'tls.key': key}} parameters.update(token_ret.get('result')) parameters['certify_uuid'] = certify_uuid except Exception, e: log.error('parameters explain error, reason is: %s' % e) return request_result(101)
def physics_del(self, service_uuid): try: ret = self.recover_driver.delete_py(service_uuid) except Exception, e: log.error('delete the database error, reason is: %s' % e) return request_result(402)
def broad_for(cls): try: token = request.headers.get('token') token_ret = token_auth(token) except Exception, e: log.error('Token check error, reason=%s' % e) return json.dumps(request_result(201))
class MonitorClientApi(object): def __init__(self): pass broad = MonitorRpcClient() monitor = MonitorManager() @classmethod def monitor_for(cls, pod_name, rtype): try: token = request.headers.get('token') token_ret = token_auth(token) except Exception, e: log.error('Token check error, reason=%s' % e) return json.dumps(request_result(201)) parameters = dict() try: parameters['time_long'] = request.values.get('time_long', '15m') parameters['time_span'] = request.values.get('time_span', '1m') parameters['pod_name'] = pod_name parameters['type'] = rtype parameters.update(token_ret.get('result')) except Exception, e: log.error("parameters error,reason=%s" % e) return json.dumps(request_result(101))
def cloudhost_create(self, team_uuid, project_uuid, user_uuid, availzone_uuid, image_uuid, vm_name, vm_cpu, vm_mem, disk_list, nic_list, password, cost, token, source_ip, resource_name): # disk_list为包含volume_type,volume_size字典的一个列表 # nic_list为包含vswitch_uuid的列表 # 创建步骤 # 1.克隆镜像 # 2.创建数据盘 # 3.创建网卡 # 4.写入数据库 # 注意,任意步骤出现异常时,需要回滚之前已执行的步骤 vm_uuid = str(uuid.uuid4()) os_disk_name = '%s_osdisk' % (vm_name) vm_disk_list = [] try: req_result = self.compute_driver.osdisk_create( token, image_uuid, os_disk_name) disk_uuid = req_result['volume_uuid'] disk_name = req_result['disk_name'] disk_info = {"disk_uuid": disk_uuid, "disk_name": disk_name} vm_disk_list.append(disk_info) except Exception, e: log.error('osdisk create failure, image_uuid=%s, reason=%s' % (image_uuid, e)) return request_result(511)
class ServiceName(Resource): def __init__(self): self.kuber = KubernetesRpcClient() @time_log def get(self, service_name): try: token = request.headers.get('token') token_ret = token_auth(token) except Exception, e: log.error('Token check error,reason=%s' % e) return request_result(201) rtype = request.args.get('rtype') context = token_ret.get('result') if rtype == 'service': context['service_name'] = service_name elif rtype == 'domain': context['domain'] = service_name else: return request_result(101) context['rtype'] = rtype ret = self.kuber.service_name_get(context) return ret
def vm_pwd_reset(self, token, server_uuid, new_password): try: op_result = self.conn.compute.\ change_server_password(server_uuid, new_password) except Exception, e: log.error('reset the password of the vm error, reason is: %s' % e) return request_result(641)
def check_manager(self): # 24小时删除的服务 try: svc_del = self.service_db.delete_in24() except Exception, e: log.error('get the delete service error, reason is: %s' % e) return request_result(404)
class RpcAPI(object): def __init__(self): self.app_resources = {} def add_resource(self, api, resource): self.app_resources[api] = resource def rpcapp_run(self, dict_data): try: api = dict_data['api'] context = dict_data['context'] parameters = dict_data['parameters'] except Exception, e: log.warning('parameters error: %s' % (e)) return request_result(101) try: return self.app_resources[api](context, parameters) except Exception, e: log.error('RPC API routing error: %s' % (e)) return request_result(102)
def only_detail_alarm(self, context, parameters=None): try: rpc_body = rpc_data('only_detail_alarm', context, parameters) return self.rbtmq.rpc_call_client(self.queue, self.timeout, rpc_body) except Exception, e: log.error('Rpc client exec error, reason is: %s' % e) return request_result(598)