Example #1
0
def vm_action(tenant_id, region):
    if not tenant_id or not region:
        return jsonify({"code": 400, "msg": "Could not find tenant_id or region or server_id"}), 400

    # 禁止跨项目操作
    user = getUserProjByToken(tenant_id)
    if not user or tenant_id not in user.proj_dict.keys():
        return jsonify({"code": 403, "msg": "project is not yours"}), 403

    body = request.json
    server_ids = body.get('servers')
    try:
        instance = InstanceManager(token=user.token, endpoint=user.get_endpoint(region, 'nova'))
        code = 200
        message = 'success'
        detail = []
        for i in server_ids.split(','):
            resp = instance.do(body, i)
            if resp.status == 202:
                _result = {"code": 200, "msg": "success", "server_id": i}
            else:
                code = 400
                message = 'failed'
                _result = openstack_error(resp)
                _result['server_id'] = i
            detail.append(_result)
        return jsonify({"code": code, "msg": message, "detail": detail}), code
    except MyError, e:
        logger.exception('MyError raised')
        return jsonify({"code": 400, "msg": '%s' % e.value}), 400
Example #2
0
def pm():
    """
    :param project_id: 租户id
    :param region: 区域
    :param  f: 起始位置
    :param  t: 结束位置
    :return: 返回物理机列表
    """
    tenant_id = request.args.get('tenant_id', None)

    # 禁止跨项目操作
    user = apiUtil.getUserProjByToken(tenant_id)
    if tenant_id not in user.proj_dict.keys():
        return jsonify({"code": 403, "msg": "无权限操作该项目".decode('utf-8')}), 403

    region = request.args.get('region', None)
    f = request.args.get('f', None)
    f = int(f) if f else f
    t = request.args.get('t', None)
    t = int(t) if t else t
    logger.info('Request: get pm servers list '
                'tenant_id => %s '
                'region => %s '
                'from => %s '
                'to => %s' % (tenant_id, region, f, t))

    try:
        result = apiUtil.get_pm(tenant_id, region, f, t)
        return jsonify(result)
    except:
        logger.exception('Error with get pm_servers')
        return jsonify({"code": 400, "msg": "Error with get pm_servers"}), 400
Example #3
0
def vm_action(tenant_id, region):
    if not tenant_id or not region:
        return jsonify({
            "code": 400,
            "msg": "Could not find tenant_id or region or server_id"
        }), 400

    # 禁止跨项目操作
    user = getUserProjByToken(tenant_id)
    if not user or tenant_id not in user.proj_dict.keys():
        return jsonify({"code": 403, "msg": "project is not yours"}), 403

    body = request.json
    server_ids = body.get('servers')
    try:
        instance = InstanceManager(token=user.token,
                                   endpoint=user.get_endpoint(region, 'nova'))
        code = 200
        message = 'success'
        detail = []
        for i in server_ids.split(','):
            resp = instance.do(body, i)
            if resp.status == 202:
                _result = {"code": 200, "msg": "success", "server_id": i}
            else:
                code = 400
                message = 'failed'
                _result = openstack_error(resp)
                _result['server_id'] = i
            detail.append(_result)
        return jsonify({"code": code, "msg": message, "detail": detail}), code
    except MyError, e:
        logger.exception('MyError raised')
        return jsonify({"code": 400, "msg": '%s' % e.value}), 400
Example #4
0
def get_vm_monitor_statics(metric, uuid, duration, region):
    user = getUserProjByToken(g.admin_proj)
    endpoint = user.get_endpoint(region, 'ceilometer')
    mana = InstanceManager(token=user.token,
                           endpoint=user.get_endpoint(region, 'nova'))
    RTN = []
    if "network" in metric:
        pass
        #ports=NetworkFlowManager().getNetInfoByUUID(UUID,NEUTRON_DB(region))
        #for port in ports:
        #obj = {}
        #obj["name"] = port["ip_address"]
        #ifaceId = ifaceID(UUID,port["id"],int(vir.id))
        #print "ifaceid:",ifaceId
        #obj["data"] = statistics(region, metric.replace("_", "."), duration, ifaceId)
        #RTN.append(obj)
    elif "disk" in metric:
        obj = {}
        obj["name"] = mana.nova_show(uuid).name
        obj["data"] = statistics(endpoint, metric.replace("_", "."), duration,
                                 uuid)
        RTN.append(obj)
    elif "cpu_util" == metric:
        obj = {}
        obj["name"] = mana.nova_show(uuid).name
        obj["data"] = statistics(endpoint, metric, duration, uuid)
        RTN.append(obj)
    return RTN
Example #5
0
def get_vm_monitor_statics(metric, uuid, duration, region):
    user = getUserProjByToken(g.admin_proj)
    endpoint = user.get_endpoint(region, 'ceilometer')
    mana = InstanceManager(token=user.token, endpoint=user.get_endpoint(region, 'nova'))
    RTN=[]
    if "network" in metric:
        pass
        #ports=NetworkFlowManager().getNetInfoByUUID(UUID,NEUTRON_DB(region))
        #for port in ports:
            #obj = {}
            #obj["name"] = port["ip_address"]
            #ifaceId = ifaceID(UUID,port["id"],int(vir.id))
            #print "ifaceid:",ifaceId
            #obj["data"] = statistics(region, metric.replace("_", "."), duration, ifaceId)
            #RTN.append(obj)
    elif "disk" in metric:
        obj={}
        obj["name"] = mana.nova_show(uuid).name
        obj["data"] = statistics(endpoint, metric.replace("_", "."), duration, uuid)
        RTN.append(obj)
    elif "cpu_util" == metric:
        obj={}
        obj["name"] = mana.nova_show(uuid).name
        obj["data"] = statistics(endpoint, metric, duration, uuid)
        RTN.append(obj)
    return RTN
Example #6
0
def get_region_tenant():
    user = getUserProjByToken()
    result = {
        "code": 200,
        "msg": "",
        "regions": user.get_regions(),
        "tenants": user.get_tenants()
    }
    return jsonify(result), 200
Example #7
0
def vm():
    """
    :param project_id: 租户id
    :param region: 区域
    :param  f: 起始位置
    :param  t: 结束位置
    :return: 返回虚拟机列表
    """
    tenant_id = request.args.get('tenant_id', None)
    region = request.args.get('region', None)

    if not tenant_id or not region:
        return jsonify({"code": 400, "msg": "Could not find tenant_id or region"}), 400

    # 禁止跨项目操作
    user = getUserProjByToken(tenant_id)
    if not user or tenant_id not in user.proj_dict.keys():
        return jsonify({"code": 403, "msg": "project is not yours"}), 403

    f = request.args.get('f', None)
    f = int(f) if f else f
    t = request.args.get('t', None)
    t = int(t) if t else t
    logger.info('Request: get vm servers list '
                'tenant_id => %s '
                'region => %s '
                'from => %s '
                'to => %s' % (tenant_id, region, f, t))

    try:
        client = InstanceManager(token=user.token, endpoint=user.get_endpoint(region, "nova"))
        instance_collection = client.nova_list(f, t)
        total_count = len(instance_collection)
        vm_servers = []
        for i in instance_collection:
            instance = {
                "instance_name": i.name,
                "instance_id": i.id,
                "region": region,
                "cpu_num": i.cpu,
                "mem_size": i.mem,
                "disk_size": i.disk,
                "lan_ip_set": i.lan_ip,
                "wan_ip_set": i.wan_ip,
                "status": i.status,
                "create_at": i.create_at,
                "update_at": i.update_at
            }
            vm_servers.append(instance)
        return jsonify({"code": 200, "msg": "", "total_count": total_count, "vm_servers": vm_servers})
    except MyError, e:
        logger.exception('MyError raised')
        return jsonify({"code": 400, "msg": '%s' % e.value}), 400
Example #8
0
def chg_pwd(tenant_id, region, uuid, pwd):
    if not tenant_id or not region:
        return jsonify({"code": 400, "msg": "Could not find tenant_id or region"}), 400

    # 禁止跨项目操作
    user = getUserProjByToken(tenant_id)
    if not user or tenant_id not in user.proj_dict.keys():
        return jsonify({"code": 403, "msg": "project is not yours"}), 403

    try:
        client = InstanceManager(token=user.token, endpoint=user.get_endpoint(region, 'nova'))
        instance = client.nova_show(uuid)
        chg_linux_pwd(instance, pwd)
        chg_win_pwd(instance, pwd)
    except MyError, e:
        logger.exception('MyError raised')
        return jsonify({"code": 400, "msg": '%s' % e.value}), 400
Example #9
0
def pm_bill():
    tenant_id = request.args.get('tenant_id', None)
    if not tenant_id:
         return jsonify({"code": 400, "msg": "Bad request, tenant_id required"}), 400

    # 禁止跨项目操作
    user = apiUtil.getUserProjByToken(tenant_id)
    if tenant_id not in user.proj_dict.keys():
        return jsonify({"code": 403, "msg": "project is not yours"}), 403

    logger.info('Request: curl -i -H "X-Auth-Token: %s" '
                '-X GET "http://api.scloudm.com/mana_api/pm_bill?tenant_id=%s"' % (g.token, tenant_id))

    try:
        result = apiUtil.get_pm_accounts(tenant_id)
        return jsonify(result)
    except:
        logger.exception('Error with get pm_accounts')
        return jsonify({"code": 400, "msg": "Error with get pm_accounts"}), 400
Example #10
0
def pm_refund(tenant_id):
    # 实体机退库

    # 禁止跨项目操作
    user = apiUtil.getUserProjByToken(tenant_id)
    if tenant_id not in user.proj_dict.keys():
        return jsonify({"code": 403, "msg": "project is not yours"}), 403

    data = request.json
    if not data:
        return jsonify({"code": 400, "msg": "Bad request, could not find json data"}), 400

    logger.info('Request: refund pm server:'
                'data => %s '
                'username => %s ' % (data, g.username))

    try:
        result = apiUtil._pm_refund(data)
        return jsonify(result), result['code']
    except MyError, e:
        logger.exception('MyError raise')
        return jsonify({"code": 400, "msg": '%s' % e.value}), 400
Example #11
0
def pm_act(tenant_id):
    if not request.json:
        return jsonify({"error": "Bad request, no json data"}), 400
    act = request.json.get('act', None)  # act 只能是 on  off  reset
    username = request.json.get('username', None)
    snids = request.json.get('snids', None)
    if not act or not username or not snids or not tenant_id:
        return jsonify({"code": 400, "msg": "Bad request, no json data"}), 400

    # 禁止跨项目操作
    user = apiUtil.getUserProjByToken(tenant_id)
    if tenant_id not in user.proj_dict.keys():
        return jsonify({"code": 403, "msg": "project is not yours"}), 403

    all_pm_info = apiUtil.get_info_by_snid(snids=snids)

    logger.info('Request: execute pm action '
                'username => %s '
                'act => %s '
                'system_snid => %s '
                'tenant_id => %s' % (username, act, snids, tenant_id))

    try:
        result = {"code": 200, "msg": "success", "detail": []}
        for a in all_pm_info:
            res = os.system('ipmitool -I lanplus -U %s -P %s -H %s power %s' % (a[0], a[1], a[2], act))
            logger.info('ipmitool -I lanplus -U %s -P %s -H %s power %s' % (a[0], a[1], a[2], act))
            if res != 0:
                result["code"] = 400
                result["msg"] = "failed"
                result["detail"].append({"code": 400, "msg": "failed", "snid": a[3]})
            else:
                result["detail"].append({"code": 200, "msg": "success", "snid": a[3]})
            apiUtil.update_stat_after_act(act, a[3])
        return jsonify(result)
    except:
        logger.exception('Error with execute act %s' % act)
        return jsonify({"code": 400, "msg": "Sys Error with execute act %s" % act}), 400
Example #12
0
def pm_bill_detail():
    tenant_id = request.args.get('tenant_id', None)
    region = request.args.get('region', None)
    month = request.args.get('month', None)
    if not month or not region or not tenant_id:
        return jsonify({"code": 400, "msg": "Bad request, lost params"}), 400

    # 禁止跨项目操作
    user = apiUtil.getUserProjByToken(tenant_id)
    if tenant_id not in user.proj_dict.keys():
        return jsonify({"code": 403, "msg": "project is not yours"}), 403

    logger.info('Request: get pm accounts detail'
                'tenant_id => %s '
                'region => %s '
                'month => %s '% (tenant_id, region, month))

    try:
        result = apiUtil.get_pm_accounts_detail(tenant_id, region, month)
        return jsonify(result)
    except:
        logger.exception('Error with get pm_accounts_detail')
        return jsonify({"code": 400, "msg": "Error with get pm_accounts_detail"}), 400
Example #13
0
def vm():
    """
    :param project_id: 租户id
    :param region: 区域
    :param  f: 起始位置
    :param  t: 结束位置
    :return: 返回虚拟机列表
    """
    tenant_id = request.args.get('tenant_id', None)
    region = request.args.get('region', None)

    if not tenant_id or not region:
        return jsonify({
            "code": 400,
            "msg": "Could not find tenant_id or region"
        }), 400

    # 禁止跨项目操作
    user = getUserProjByToken(tenant_id)
    if not user or tenant_id not in user.proj_dict.keys():
        return jsonify({"code": 403, "msg": "project is not yours"}), 403

    f = request.args.get('f', None)
    f = int(f) if f else f
    t = request.args.get('t', None)
    t = int(t) if t else t
    logger.info('Request: get vm servers list '
                'tenant_id => %s '
                'region => %s '
                'from => %s '
                'to => %s' % (tenant_id, region, f, t))

    try:
        client = InstanceManager(token=user.token,
                                 endpoint=user.get_endpoint(region, "nova"))
        instance_collection = client.nova_list(f, t)
        total_count = len(instance_collection)
        vm_servers = []
        for i in instance_collection:
            instance = {
                "instance_name": i.name,
                "instance_id": i.id,
                "region": region,
                "cpu_num": i.cpu,
                "mem_size": i.mem,
                "disk_size": i.disk,
                "lan_ip_set": i.lan_ip,
                "wan_ip_set": i.wan_ip,
                "status": i.status,
                "create_at": i.create_at,
                "update_at": i.update_at
            }
            vm_servers.append(instance)
        return jsonify({
            "code": 200,
            "msg": "",
            "total_count": total_count,
            "vm_servers": vm_servers
        })
    except MyError, e:
        logger.exception('MyError raised')
        return jsonify({"code": 400, "msg": '%s' % e.value}), 400
Example #14
0
def get_region_tenant():
    user = getUserProjByToken()
    result = {"code": 200, "msg": "", "regions": user.get_regions(), "tenants": user.get_tenants()}
    return jsonify(result), 200