Exemple #1
0
def host_create():
    request_debug(r, logger)
    name, worker_api, capacity, log_type, log_server, log_level, host_type = \
        r.form['name'], r.form['worker_api'], r.form['capacity'], \
        r.form['log_type'], r.form['log_server'], r.form['log_level'], \
        r.form['host_type'] if 'host_type' in r.form else None

    if "autofill" in r.form and r.form["autofill"] == "on":
        autofill = "true"
    else:
        autofill = "false"

    if "schedulable" in r.form and r.form["schedulable"] == "on":
        schedulable = "true"
    else:
        schedulable = "false"

    logger.debug("name={}, worker_api={}, capacity={}"
                 "fillup={}, schedulable={}, log={}/{}".format(
                     name, worker_api, capacity, autofill, schedulable,
                     log_type, log_server))
    if not name or not worker_api or not capacity or not log_type:
        error_msg = "host POST without enough data"
        logger.warning(error_msg)
        return make_fail_resp(error=error_msg, data=r.form)
    else:
        host_type = host_type if host_type else detect_daemon_type(worker_api)
        result = host_handler.create(name=name,
                                     worker_api=worker_api,
                                     capacity=int(capacity),
                                     autofill=autofill,
                                     schedulable=schedulable,
                                     log_level=log_level,
                                     log_type=log_type,
                                     log_server=log_server,
                                     host_type=host_type)
        if result:
            logger.debug("host creation successfully")
            return make_ok_resp(code=CODE_CREATED)
        else:
            error_msg = "Failed to create host {}".format(r.form["name"])
            logger.warning(error_msg)
            return make_fail_resp(error=error_msg)
Exemple #2
0
def host_create():
    request_debug(r, logger)
    name, daemon_url, capacity, log_type, log_server, log_level = \
        r.form['name'], r.form['daemon_url'], r.form['capacity'], \
        r.form['log_type'], r.form['log_server'], r.form['log_level']

    if "autofill" in r.form and r.form["autofill"] == "on":
        autofill = "true"
    else:
        autofill = "false"

    if "schedulable" in r.form and r.form["schedulable"] == "on":
        schedulable = "true"
    else:
        schedulable = "false"

    logger.debug("name={}, daemon_url={}, capacity={}"
                 "fillup={}, schedulable={}, log={}/{}".format(
                     name, daemon_url, capacity, autofill, schedulable,
                     log_type, log_server))
    if not name or not daemon_url or not capacity or not log_type:
        error_msg = "host POST without enough data"
        logger.warning(error_msg)
        return make_fail_response(error=error_msg, data=r.form)
    else:
        result = host_handler.create(name=name,
                                     daemon_url=daemon_url,
                                     capacity=int(capacity),
                                     autofill=autofill,
                                     schedulable=schedulable,
                                     log_level=log_level,
                                     log_type=log_type,
                                     log_server=log_server)
        if result:
            logger.debug("host creation successfully")
            return make_ok_response(), CODE_CREATED
        else:
            error_msg = "Failed to create host {}".format(r.form["name"])
            logger.warning(error_msg)
            return make_fail_response(error=error_msg)
Exemple #3
0
def host_create():
    request_debug(r, logger)
    name, worker_api, capacity, log_type, log_server, log_level = \
        r.form['name'], r.form['worker_api'], r.form['capacity'], \
        r.form['log_type'], r.form['log_server'], r.form['log_level']

    if "autofill" in r.form and r.form["autofill"] == "on":
        autofill = "true"
    else:
        autofill = "false"

    if "schedulable" in r.form and r.form["schedulable"] == "on":
        schedulable = "true"
    else:
        schedulable = "false"

    logger.debug("name={}, worker_api={}, capacity={}"
                 "fillup={}, schedulable={}, log={}/{}".
                 format(name, worker_api, capacity, autofill, schedulable,
                        log_type, log_server))
    if not name or not worker_api or not capacity or not log_type:
        error_msg = "host POST without enough data"
        logger.warning(error_msg)
        return make_fail_resp(error=error_msg, data=r.form)
    else:
        result = host_handler.create(name=name, worker_api=worker_api,
                                     capacity=int(capacity),
                                     autofill=autofill,
                                     schedulable=schedulable,
                                     log_level=log_level,
                                     log_type=log_type,
                                     log_server=log_server)
        if result:
            logger.debug("host creation successfully")
            return make_ok_resp(code=CODE_CREATED)
        else:
            error_msg = "Failed to create host {}".format(r.form["name"])
            logger.warning(error_msg)
            return make_fail_resp(error=error_msg)
Exemple #4
0
def host_create():
    request_debug(r, logger)
    if r.content_type.startswith("application/json"):
        body = dict(r.get_json(force=True, silent=True))
    else:
        body = r.form
    name, worker_api, capacity, log_type, log_server, log_level, host_type = \
        body['name'], body['worker_api'], body['capacity'], \
        body['log_type'], body.get('log_server', ''), body['log_level'], \
        body['host_type'] if 'host_type' in body else None

    if "autofill" in body and body["autofill"] == "on":
        autofill = "true"
    else:
        autofill = "false"

    if "schedulable" in body and body["schedulable"] == "on":
        schedulable = "true"
    else:
        schedulable = "false"

    if host_type == "vsphere":
        vcaddress = body['vc_address']
        if vcaddress.find(":") == -1:
            address = vcaddress
            port = "443"
        else:
            address = vcaddress.split(':')[0]
            port = vcaddress.split(':')[1]
        logger.debug("address={}, port={}".format(address, port))

        vmname = "cello-vsphere-" + str(uuid.uuid1())
        vsphere_param = {
            'vc': {
                'address': address,
                'port': port,
                'username': body['vc_user'],
                'password': body['vc_password'],
                'network': body['vc_network'],
                'vc_datastore': body['datastore'],
                'vc_datacenter': body['datacenter'],
                'vc_cluster': body['cluster'],
                'template': body['vm_template']
            },
            'vm': {
                'vmname': vmname,
                'ip': body['vm_ip'],
                'gateway': body['vm_gateway'],
                'netmask': body['vm_netmask'],
                'dns': body['vm_dns'],
                'vcpus': int(body['vm_cpus']),
                'memory': int(body['vm_memory'])
            }
        }

        logger.debug(
            "name={}, capacity={},"
            "fillup={}, schedulable={}, log={}/{}, vsphere_param={}".format(
                name, capacity, autofill, schedulable, log_type, log_server,
                vsphere_param))

        vsphere_must_have_params = {
            'Name': name,
            'Capacity': capacity,
            'LoggingType': log_type,
            'VCAddress': address,
            'VCUser': body['vc_user'],
            'VCPassword': body['vc_password'],
            'VCNetwork': body['vc_network'],
            'Datastore': body['datastore'],
            'Datacenter': body['datacenter'],
            'Cluster': body['cluster'],
            'VMIp': body['vm_ip'],
            'VMGateway': body['vm_gateway'],
            'VMNetmask': body['vm_netmask']
        }
        for key in vsphere_must_have_params:
            if vsphere_must_have_params[key] == '':
                error_msg = "host POST without {} data".format(key)
                logger.warning(error_msg)
                return make_fail_resp(error=error_msg, data=body)
        result = host_handler.create(name=name,
                                     worker_api=worker_api,
                                     capacity=int(capacity),
                                     autofill=autofill,
                                     schedulable=schedulable,
                                     log_level=log_level,
                                     log_type=log_type,
                                     log_server=log_server,
                                     host_type=host_type,
                                     params=vsphere_param)

    elif host_type == 'kubernetes':
        worker_api = body['worker_api']
        k8s_param = create_k8s_host(name, capacity, log_type, body)
        if len(k8s_param) == 0:
            return make_fail_resp(error=error_msg, data=r.form)

        logger.debug(
            "name={}, worker_api={},  capacity={},"
            "fillup={}, schedulable={}, log={}/{}, k8s_param={}".format(
                name, worker_api, capacity, autofill, schedulable, log_type,
                log_server, k8s_param))

        result = host_handler.create(name=name,
                                     worker_api=worker_api,
                                     capacity=int(capacity),
                                     autofill=autofill,
                                     schedulable=schedulable,
                                     log_level=log_level,
                                     log_type=log_type,
                                     log_server=log_server,
                                     host_type=host_type,
                                     params=k8s_param)

    else:
        logger.debug("name={}, worker_api={}, capacity={}"
                     "fillup={}, schedulable={}, log={}/{}".format(
                         name, worker_api, capacity, autofill, schedulable,
                         log_type, log_server))
        if not name or not worker_api or not capacity or not log_type:
            error_msg = "host POST without enough data"
            logger.warning(error_msg)
            return make_fail_resp(error=error_msg, data=body)
        else:
            host_type = host_type if host_type \
                else detect_daemon_type(worker_api)
            result = host_handler.create(name=name,
                                         worker_api=worker_api,
                                         capacity=int(capacity),
                                         autofill=autofill,
                                         schedulable=schedulable,
                                         log_level=log_level,
                                         log_type=log_type,
                                         log_server=log_server,
                                         host_type=host_type)
    logger.debug("result.msg={}".format(result.get('msg')))
    if (host_type == "vsphere") and ('msg' in result):
        vsphere_errmsg = result.get('msg')
        error_msg = "Failed to create vsphere host {}".format(vsphere_errmsg)
        logger.warning(error_msg)
        return make_fail_resp(error=error_msg)
    elif result:
        logger.debug("host creation successfully")
        return make_ok_resp(code=CODE_CREATED)
    else:
        error_msg = "Failed to create host {}".format(body["name"])
        logger.warning(error_msg)
        return make_fail_resp(error=error_msg)
Exemple #5
0
    def post(self):
        request_debug(r, logger)
        args = host_create_parser.parse_args()
        name = args.get('host_name')
        worker_api = args.get('worker_api')
        capacity = args.get('capacity')
        host_type = args.get('host_type')

        if host_type != "docker":
            return {'stat': 20001, 'msg': '后续开放'}
            # vcaddress = args['vc_address']
            # if vcaddress.find(":") == -1:
            #     address = vcaddress
            #     port = "443"
            # else:
            #     address = vcaddress.split(':')[0]
            #     port = vcaddress.split(':')[1]
            # logger.debug("address={}, port={}".format(address, port))
            #
            # vmname = "cello-vsphere-" + str(uuid.uuid1())
            # vsphere_param = {
            #     'vc': {
            #         'address': address,
            #         'port': port,
            #         'username': args['vc_user'],
            #         'password': args['vc_password'],
            #         'network': args['vc_network'],
            #         'vc_datastore': args['datastore'],
            #         'vc_datacenter': args['datacenter'],
            #         'vc_cluster': args['cluster'],
            #         'template': args['vm_template']},
            #     'vm': {
            #         'vmname': vmname,
            #         'ip': args['vm_ip'],
            #         'gateway': args['vm_gateway'],
            #         'netmask': args['vm_netmask'],
            #         'dns': args['vm_dns'],
            #         'vcpus': int(args['vm_cpus']),
            #         'memory': int(args['vm_memory'])}}
            #
            # vsphere_must_have_params = {
            #     'Name': name,
            #     'Capacity': capacity,
            #     'VCAddress': address,
            #     'VCUser': args['vc_user'],
            #     'VCPassword': args['vc_password'],
            #     'VCNetwork': args['vc_network'],
            #     'Datastore': args['datastore'],
            #     'Datacenter': args['datacenter'],
            #     'Cluster': args['cluster'],
            #     'VMIp': args['vm_ip'],
            #     'VMGateway': args['vm_gateway'],
            #     'VMNetmask': args['vm_netmask']}
            # for key in vsphere_must_have_params:
            #     if vsphere_must_have_params[key] == '':
            #         error_msg = "host POST without {} data".format(key)
            #         logger.warning(error_msg)
            #         return make_fail_resp(error=error_msg, data=args)
            # result = host_handler.create(name=name, worker_api=worker_api,
            #                              capacity=int(capacity),
            #                              autofill=autofill,
            #                              schedulable=schedulable,
            #                              log_level=log_level,
            #                              log_type=log_type,
            #                              log_server=log_server,
            #                              host_type=host_type,
            #                              params=vsphere_param)

        # elif host_type == 'kubernetes':
        #     return {'stat': 20001, 'msg': '后续开放'}
        #
        #     worker_api = body['worker_api']
        #     k8s_param = create_k8s_host(name, capacity, log_type, body)
        #     if len(k8s_param) == 0:
        #         return make_fail_resp(error=error_msg, data=r.form)
        #
        #     logger.debug("name={}, worker_api={},  capacity={},"
        #                  "fillup={}, schedulable={}, log={}/{}, k8s_param={}".
        #                  format(name, worker_api, capacity, autofill,
        #                         schedulable, log_type, log_server, k8s_param))
        #
        #     result = host_handler.create(name=name, worker_api=worker_api,
        #                                  capacity=int(capacity),
        #                                  autofill=autofill,
        #                                  schedulable=schedulable,
        #                                  log_level=log_level,
        #                                  log_type=log_type,
        #                                  log_server=log_server,
        #                                  host_type=host_type,
        #                                  params=k8s_param)

        else:
            logger.debug(
                "name={}, worker_api={}, capacity={},host_type={}".format(
                    name, worker_api, capacity,
                    host_type if host_type else 'docker'))
            if not name or not worker_api or not capacity:
                error_msg = "参数缺失"
                logger.warning(error_msg)
                return make_fail_resp(error=error_msg, data=args)

            url = urlparse(worker_api)
            if not url.scheme:
                worker_api = "tcp://" + worker_api  # worker node listen on tcp port
            segs = worker_api.split(":")
            if len(segs) != 3:
                logger.error("Invalid daemon url = ", worker_api)
                return make_fail_resp(error='服务器地址格式错误',
                                      data={"worker_api": worker_api})

            host = HostModel.objects(name=name)
            if host:
                error_msg = '主机名已存在'
                return make_fail_resp(error=error_msg, data={'name': name})

            host = HostModel.objects(worker_api=worker_api)
            if host:
                error_msg = '服务器地址已存在'
                return make_fail_resp(error=error_msg,
                                      data={"worker_api": worker_api})
            if not check_worker_api(worker_api):
                error_msg = '服务器地址异常'
                logger.error(error_msg)
                # return make_fail_resp(error=error_msg, data={'worker_api': worker_api})
                return {'msg': error_msg, 'stat': 400}

            host_type = host_type if host_type else detect_daemon_type(
                worker_api)
            result = host_handler.create(name=name,
                                         worker_api=worker_api,
                                         capacity=int(capacity),
                                         host_type=host_type)

        logger.debug("result.msg={}".format(result.get('msg')))
        if (host_type == "vsphere") and ('msg' in result):
            vsphere_errmsg = result.get('msg')
            error_msg = "Failed to create vsphere host {}".format(
                vsphere_errmsg)
            logger.warning(error_msg)
            return make_fail_resp(error=error_msg)
        elif result:
            logger.debug("host creation successfully")
            return make_ok_resp()
        else:
            error_msg = "Failed to create host {}".format(args["host_name"])
            logger.warning(error_msg)
            return make_fail_resp(error=error_msg)
Exemple #6
0
def host_api():
    request_debug(r, logger)
    if r.method == 'GET':
        if "id" not in r.args and "id" not in r.form:
            logger.warn("host get without enough data")
            response_fail["error"] = "host GET without enough data"
            response_fail["data"] = r.form
            return jsonify(response_fail), CODE_BAD_REQUEST
        else:
            host_id = request_get(r, "id")
            result = host_handler.get_by_id(host_id)
            if result:
                return jsonify(result), CODE_OK
            else:
                logger.warn("host not found with id=" + host_id)
                response_fail["data"] = r.form
                return jsonify(response_fail), CODE_BAD_REQUEST
    elif r.method == 'POST':
        name, daemon_url, capacity, log_type, log_server, log_level = \
            r.form['name'], r.form['daemon_url'], r.form['capacity'], \
            r.form['log_type'], r.form['log_server'], r.form['log_level']

        if "autofill" in r.form and r.form["autofill"] == "on":
            autofill = "true"
        else:
            autofill = "false"

        if "schedulable" in r.form and r.form["schedulable"] == "on":
            schedulable = "true"
        else:
            schedulable = "false"

        logger.debug("name={}, daemon_url={}, capacity={}"
                     "fillup={}, schedulable={}, log={}/{}".format(
                         name, daemon_url, capacity, autofill, schedulable,
                         log_type, log_server))
        if not name or not daemon_url or not capacity or not log_type:
            logger.warn("host post without enough data")
            response_fail["error"] = "host POST without enough data"
            response_fail["data"] = r.form
            return jsonify(response_fail), CODE_BAD_REQUEST
        else:
            result = host_handler.create(name=name,
                                         daemon_url=daemon_url,
                                         capacity=int(capacity),
                                         autofill=autofill,
                                         schedulable=schedulable,
                                         log_level=log_level,
                                         log_type=log_type,
                                         log_server=log_server)
            if result:
                logger.debug("host creation successfully")
                return jsonify(response_ok), CODE_CREATED
            else:
                logger.debug("host creation failed")
                response_fail["error"] = "Failed to create host {}".format(
                    r.form["name"])
                return jsonify(response_fail), CODE_BAD_REQUEST
    elif r.method == 'PUT':
        if "id" not in r.form:
            logger.warn("host put without enough data")
            response_fail["error"] = "host PUT without enough data"
            response_fail["data"] = r.form
            return jsonify(response_fail), CODE_BAD_REQUEST
        else:
            id, d = r.form["id"], {}
            for k in r.form:
                if k != "id":
                    d[k] = r.form.get(k)
            result = host_handler.update(id, d)
            if result:
                logger.debug("host PUT successfully")
                return jsonify(response_ok), CODE_OK
            else:
                logger.debug("host PUT failed")
                response_fail["error"] = "Failed to update host {}".format(
                    result.get("name"))
                return jsonify(response_fail), CODE_BAD_REQUEST
    elif r.method == 'DELETE':
        if "id" not in r.form or not r.form["id"]:
            logger.warn("host operation post without enough data")
            response_fail["error"] = "host delete without enough data"
            response_fail["data"] = r.form
            return jsonify(response_fail), CODE_BAD_REQUEST
        else:
            logger.debug("host delete with id={0}".format(r.form["id"]))
            if host_handler.delete(id=r.form["id"]):
                return jsonify(response_ok), CODE_OK
            else:
                response_fail["error"] = "Failed to delete host {}".format(
                    r.form["id"])
                return jsonify(response_fail), CODE_BAD_REQUEST
    else:
        response_fail["error"] = "unknown operation method"
        response_fail["data"] = r.form
        return jsonify(response_fail), CODE_BAD_REQUEST
Exemple #7
0
def host_create():
    request_debug(r, logger)
    name, worker_api, capacity, log_type, log_server, log_level, host_type = \
        r.form['name'], r.form['worker_api'], r.form['capacity'], \
        r.form['log_type'], r.form['log_server'], r.form['log_level'], \
        r.form['host_type'] if 'host_type' in r.form else None

    if "autofill" in r.form and r.form["autofill"] == "on":
        autofill = "true"
    else:
        autofill = "false"

    if "schedulable" in r.form and r.form["schedulable"] == "on":
        schedulable = "true"
    else:
        schedulable = "false"

    if host_type == "vsphere":
        vcaddress = r.form['vc_address']
        if vcaddress.find(":") == -1:
            address = vcaddress
            port = "443"
        else:
            address = vcaddress.split(':')[0]
            port = vcaddress.split(':')[1]
        logger.debug("address={}, port={}".format(address, port))

        vmname = "cello-vsphere-" + str(uuid.uuid1())
        vsphere_param = {
            'vc': {
                'address': address,
                'port': port,
                'username': r.form['vc_user'],
                'password': r.form['vc_password'],
                'network': r.form['vc_network'],
                'vc_datastore': r.form['datastore'],
                'vc_datacenter': r.form['datacenter'],
                'vc_cluster': r.form['cluster'],
                'template': r.form['vm_template']},
            'vm': {
                'vmname': vmname,
                'ip': r.form['vm_ip'],
                'gateway': r.form['vm_gateway'],
                'netmask': r.form['vm_netmask'],
                'dns': r.form['vm_dns'],
                'vcpus': int(r.form['vm_cpus']),
                'memory': int(r.form['vm_memory'])}}

        logger.debug("name={}, capacity={},"
                     "fillup={}, schedulable={}, log={}/{}, vsphere_param={}".
                     format(name, capacity, autofill, schedulable,
                            log_type, log_server, vsphere_param))

        vsphere_must_have_params = {
            'Name': name,
            'Capacity': capacity,
            'LoggingType': log_type,
            'VCAddress': address,
            'VCUser': r.form['vc_user'],
            'VCPassword': r.form['vc_password'],
            'VCNetwork': r.form['vc_network'],
            'Datastore': r.form['datastore'],
            'Datacenter': r.form['datacenter'],
            'Cluster': r.form['cluster'],
            'VMIp': r.form['vm_ip'],
            'VMGateway': r.form['vm_gateway'],
            'VMNetmask': r.form['vm_netmask']}
        for key in vsphere_must_have_params:
            if vsphere_must_have_params[key] == '':
                error_msg = "host POST without {} data".format(key)
                logger.warning(error_msg)
                return make_fail_resp(error=error_msg, data=r.form)
        result = host_handler.create(name=name, worker_api=worker_api,
                                     capacity=int(capacity),
                                     autofill=autofill,
                                     schedulable=schedulable,
                                     log_level=log_level,
                                     log_type=log_type,
                                     log_server=log_server,
                                     host_type=host_type,
                                     params=vsphere_param)
    else:
        logger.debug("name={}, worker_api={}, capacity={}"
                     "fillup={}, schedulable={}, log={}/{}".
                     format(name, worker_api, capacity, autofill, schedulable,
                            log_type, log_server))
        if not name or not worker_api or not capacity or not log_type:
            error_msg = "host POST without enough data"
            logger.warning(error_msg)
            return make_fail_resp(error=error_msg, data=r.form)
        else:
            host_type = host_type if host_type \
                else detect_daemon_type(worker_api)
            result = host_handler.create(name=name, worker_api=worker_api,
                                         capacity=int(capacity),
                                         autofill=autofill,
                                         schedulable=schedulable,
                                         log_level=log_level,
                                         log_type=log_type,
                                         log_server=log_server,
                                         host_type=host_type)
    logger.debug("result.msg={}".format(result.get('msg')))
    if (host_type == "vsphere") and ('msg' in result):
        vsphere_errmsg = result.get('msg')
        error_msg = "Failed to create vsphere host {}".format(vsphere_errmsg)
        logger.warning(error_msg)
        return make_fail_resp(error=error_msg)
    elif result:
        logger.debug("host creation successfully")
        return make_ok_resp(code=CODE_CREATED)
    else:
        error_msg = "Failed to create host {}".format(r.form["name"])
        logger.warning(error_msg)
        return make_fail_resp(error=error_msg)