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)
Exemplo n.º 4
0
    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)
Exemplo n.º 5
0
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)
Exemplo n.º 8
0
 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)
Exemplo n.º 9
0
 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)
Exemplo n.º 10
0
 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)
Exemplo n.º 11
0
 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)
Exemplo n.º 12
0
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)
Exemplo n.º 14
0
 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)
Exemplo n.º 15
0
 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)
Exemplo n.º 16
0
    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)
Exemplo n.º 18
0
    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)
Exemplo n.º 20
0
    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)
Exemplo n.º 22
0
    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)
Exemplo n.º 23
0
 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))
Exemplo n.º 24
0
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
Exemplo n.º 27
0
 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)
Exemplo n.º 28
0
 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)
Exemplo n.º 29
0
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)
Exemplo n.º 30
0
 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)