Esempio n. 1
0
    def delete(self):
        args = host_user_add_parser.parse_args()
        host_id = args.get('host_id')
        user_id = args.get('user_id')
        if not all([host_id, user_id]):
            return make_fail_resp(error='参数缺失')

        try:
            host = HostModel.objects(id=host_id)
        except Exception as e:
            logger.error(e)
            return make_fail_resp(error='db error')
        if not host:
            return make_fail_resp(error='主机不存在')

        try:
            user = UserModel.objects(id=user_id)
        except Exception as e:
            logger.error(e)
            return make_fail_resp(error='db error')
        try:
            user.update(host=None)
        except Exception as e:
            logger.error(e)
            return make_fail_resp(error='db error')

        return
Esempio n. 2
0
    def post(self):
        args = host_user_add_parser.parse_args()
        host_id = args.get('host_id')
        user_id = args.get('user_id')
        if not all([host_id, user_id]):
            return make_fail_resp(error='参数缺失')

        try:
            host = HostModel.objects.get(id=host_id)
            user = UserModel.objects.get(id=user_id)
        except Exception as e:
            logger.error(e)
            return make_fail_resp(error='db error')
        if not host:
            return make_fail_resp(error='主机不存在')

        # try:
        #     user = UserModel.objects(id=user_id)
        # except Exception as e:
        #     logger.error(e)
        #     return make_fail_resp(error='db error')
        if not user:
            return make_fail_resp(error='用户不存在')
        if user.host == host:
            return {'msg': '用户已在主机列表'}
        try:
            user.update(host=host)
        except Exception as exc:
            logger.warning(exc)
            return make_fail_resp(error='db error')
        return
Esempio n. 3
0
def cluster_release_dep():
    """
    Return status.
    """
    request_debug(r, logger)
    user_id = request_get(r, "user_id")
    cluster_id = request_get(r, "cluster_id")
    if not user_id and not cluster_id:
        error_msg = "cluster_release without id"
        logger.warning(error_msg)
        return make_fail_resp(error=error_msg, data=r.args)
    else:
        result = None
        if cluster_id:
            result = cluster_handler.release_cluster(cluster_id=cluster_id)
        elif user_id:
            result = cluster_handler.release_cluster_for_user(user_id=user_id)
        if not result:
            error_msg = "cluster_release failed user_id={} cluster_id={}". \
                format(user_id, cluster_id)
            logger.warning(error_msg)
            data = {
                "user_id": user_id,
                "cluster_id": cluster_id,
            }
            return make_fail_resp(error=error_msg, data=data)
        else:
            return make_ok_resp()
Esempio n. 4
0
def cluster_release_dep():
    """
    Return status.
    """
    request_debug(r, logger)
    user_id = request_get(r, "user_id")
    cluster_id = request_get(r, "cluster_id")
    if not user_id and not cluster_id:
        error_msg = "cluster_release without id"
        logger.warning(error_msg)
        return make_fail_resp(error=error_msg, data=r.args)
    else:
        result = None
        if cluster_id:
            result = cluster_handler.release_cluster(cluster_id=cluster_id)
        elif user_id:
            result = cluster_handler.release_cluster_for_user(user_id=user_id)
        if not result:
            error_msg = "cluster_release failed user_id={} cluster_id={}". \
                format(user_id, cluster_id)
            logger.warning(error_msg)
            data = {
                "user_id": user_id,
                "cluster_id": cluster_id,
            }
            return make_fail_resp(error=error_msg, data=data)
        else:
            return make_ok_resp()
Esempio n. 5
0
def create_user():
    request_debug(r, logger)
    if not r.form["username"] or not r.form["password"] \
            or not r.form["role"]:
        error_msg = "create user without enough data"
        logger.warning(error_msg)
        return make_fail_resp(error=error_msg, data=r.form)

    username, password = r.form["username"], r.form["password"]
    role, active = int(r.form["role"]), r.form["active"]
    active = active == "true"
    salt = app.config.get("SALT", b"")
    password = bcrypt.hashpw(password.encode('utf8'), bytes(salt.encode()))

    try:
        user = User(username,
                    password,
                    is_admin=role == ADMIN,
                    role=role,
                    active=active)
        user.save()
        return make_ok_resp(code=CODE_CREATED)
    except Exception as exc:
        logger.info("exc %s", exc)
        return make_fail_resp(error="create user failed")
Esempio n. 6
0
 def delete(self):
     request_debug(r, logger)
     args = host_delete_parser.parse_args()
     host_id = args.get('host_id')
     # if "id" in r.form:
     #     host_id = r.form["id"]
     # elif "id" in request_data:
     #     host_id = request_data.get("id")
     # else:
     #     error_msg = "host delete without enough data"
     #     logger.warning(error_msg)
     #     return make_fail_resp(error=error_msg, data=r.form)
     if not host_id:
         error_msg = "缺少参数"
         logger.warning(error_msg)
         return make_fail_resp(error=error_msg)
     logger.debug("host delete with id={0}".format(host_id))
     try:
         host = HostModel.objects.get(id=host_id)
     except Exception:
         logger.warning("Cannot delete non-existed host")
         return make_fail_resp(error='无法删除不存在的主机')
     if ClusterModel.objects(host=host).count() > 0:
         return {'stat': 1000, 'msg': '主机存在已创建的区块链,无法删除'}
     if host_handler.delete(host):
         return make_ok_resp()
     else:
         error_msg = "Failed to delete host {}".format(host_id)
         logger.warning(error_msg)
         return make_fail_resp(error=error_msg)
Esempio n. 7
0
    def get(self):
        args = host_user_list_parser.parse_args()
        host_id = args.get('host_id')
        page = args['pageNo']
        per_page = args['pageSize']
        if not host_id:
            error_msg = '缺少参数'
            return make_fail_resp(error=error_msg)

        host = HostModel.objects.get(id=host_id)
        if not host:
            error_msg = '主机不存在'
            return make_fail_resp(error=error_msg)

        offset = (page - 1) * per_page

        user_count = UserModel.objects(host=host).count()
        users = UserModel.objects(host=host).skip(offset).limit(per_page)
        data = {
            'users': users,
            'totalCount': user_count,
            'pageSize': per_page,
            'pageNo': page,
        }
        return {'data': data}
Esempio n. 8
0
def cluster_create():
    """Create a cluster on a host

    POST /cluster
    {
    name: xxx,
    host_id: xxx,
    network_type=fabric-0.6,
    consensus_plugin: pbft,
    consensus_mode: batch,
    size: 4,
    }

    :return: response object
    """
    logger.info("/cluster action=" + r.method)
    request_debug(r, logger)
    if r.content_type.startswith("application/json"):
        body = dict(r.get_json(force=True, silent=True))
    else:
        body = r.form
    if not body["name"] or not body["host_id"] or \
            not body["network_type"]:
        error_msg = "cluster post without enough data"
        logger.warning(error_msg)
        return make_fail_resp(error=error_msg, data=body)

    name, host_id, network_type, size = \
        body['name'], body['host_id'],\
        body['network_type'], int(body['size'])

    if network_type == NETWORK_TYPE_FABRIC_PRE_V1:  # TODO: deprecated soon
        config = FabricPreNetworkConfig(
            consensus_plugin=body['consensus_plugin'],
            consensus_mode=body['consensus_mode'],
            size=size)
    elif network_type == NETWORK_TYPE_FABRIC_V1:
        config = FabricV1NetworkConfig(
            consensus_plugin=body['consensus_plugin'], size=size)
    elif network_type == NETWORK_TYPE_FABRIC_V1_1:
        config = FabricV1NetworkConfig(
            consensus_plugin=body['consensus_plugin'], size=size)
        config.network_type = NETWORK_TYPE_FABRIC_V1_1
    else:
        error_msg = "Unknown network_type={}".format(network_type)
        logger.warning(error_msg)
        return make_fail_resp()

    if not config.validate():
        return make_fail_resp(error="config not validated",
                              data=config.get_data())

    if cluster_handler.create(name=name, host_id=host_id, config=config):
        logger.debug("cluster POST successfully")
        return make_ok_resp(code=CODE_CREATED)
    else:
        logger.debug("cluster creation failed using handlder")
        return make_fail_resp(error="Failed to create cluster {}".format(name))
Esempio n. 9
0
def cluster_create():
    """Create a cluster on a host

    POST /cluster
    {
    name: xxx,
    host_id: xxx,
    network_type=fabric-0.6,
    consensus_plugin: pbft,
    consensus_mode: batch,
    size: 4,
    }

    :return: response object
    """
    logger.info("/cluster action=" + r.method)
    request_debug(r, logger)
    if not r.form["name"] or not r.form["host_id"] or \
            not r.form["network_type"]:
        error_msg = "cluster post without enough data"
        logger.warning(error_msg)
        return make_fail_resp(error=error_msg, data=r.form)

    name, host_id, network_type = \
        r.form['name'], r.form['host_id'], r.form['network_type']

    if network_type == NETWORK_TYPE_FABRIC_PRE_V1:
        config = FabricPreNetworkConfig(
            consensus_plugin=r.form['consensus_plugin'],
            consensus_mode=r.form['consensus_mode'],
            size=r.form['size'])
    elif network_type == NETWORK_TYPE_FABRIC_V1:
        config = FabricV1NetworkConfig(
            size=r.form['size'])  # TODO: add more variables
    else:
        error_msg = "Unknown network_type={}".format(network_type)
        logger.warning(error_msg)
        return make_fail_resp()

    if not config.validate():
        return make_fail_resp(error="config not validated",
                              data=config.get_data())

    if cluster_handler.create(name=name,
                              host_id=host_id,
                              network_type=network_type,
                              config=config):
        logger.debug("cluster POST successfully")
        return make_ok_resp(code=CODE_CREATED)
    else:
        logger.debug("cluster creation failed using handlder")
        return make_fail_resp(error="Failed to create cluster {}".format(name))
Esempio n. 10
0
def cluster_create():
    """Create a cluster on a host

    POST /cluster
    {
    name: xxx,
    host_id: xxx,
    network_type=fabric-0.6,
    consensus_plugin: pbft,
    consensus_mode: batch,
    size: 4,
    }

    :return: response object
    """
    logger.info("/cluster action=" + r.method)
    request_debug(r, logger)
    if not r.form["name"] or not r.form["host_id"] or \
            not r.form["network_type"]:
        error_msg = "cluster post without enough data"
        logger.warning(error_msg)
        return make_fail_resp(error=error_msg, data=r.form)

    name, host_id, network_type, size = \
        r.form['name'], r.form['host_id'],\
        r.form['network_type'], int(r.form['size'])

    if network_type == NETWORK_TYPE_FABRIC_PRE_V1:  # TODO: deprecated soon
        config = FabricPreNetworkConfig(
            consensus_plugin=r.form['consensus_plugin'],
            consensus_mode=r.form['consensus_mode'],
            size=size)
    elif network_type == NETWORK_TYPE_FABRIC_V1:
        config = FabricV1NetworkConfig(
            consensus_plugin=r.form['consensus_plugin'],
            size=size)
    else:
        error_msg = "Unknown network_type={}".format(network_type)
        logger.warning(error_msg)
        return make_fail_resp()

    if not config.validate():
        return make_fail_resp(error="config not validated",
                              data=config.get_data())

    if cluster_handler.create(name=name, host_id=host_id, config=config):
        logger.debug("cluster POST successfully")
        return make_ok_resp(code=CODE_CREATED)
    else:
        logger.debug("cluster creation failed using handlder")
        return make_fail_resp(error="Failed to create cluster {}".
                              format(name))
Esempio n. 11
0
def cluster_apply_dep():
    """
    Return a Cluster json body.
    """
    request_debug(r, logger)

    user_id = request_get(r, "user_id")
    if not user_id:
        error_msg = "cluster_apply without user_id"
        logger.warning(error_msg)
        return make_fail_resp(error=error_msg)

    allow_multiple, condition = request_get(r, "allow_multiple"), {}

    consensus_plugin = request_get(r, "consensus_plugin")
    consensus_mode = request_get(r, "consensus_mode")
    cluster_size = int(request_get(r, "size") or -1)
    if consensus_plugin:
        if consensus_plugin not in CONSENSUS_PLUGINS:
            error_msg = "Invalid consensus_plugin"
            logger.warning(error_msg)
            return make_fail_resp(error=error_msg)
        else:
            condition["consensus_plugin"] = consensus_plugin

    if consensus_mode:
        if consensus_mode not in CONSENSUS_MODES:
            error_msg = "Invalid consensus_mode"
            logger.warning(error_msg)
            return make_fail_resp(error=error_msg)
        else:
            condition["consensus_mode"] = consensus_mode

    if cluster_size >= 0:
        if cluster_size not in NETWORK_SIZE_FABRIC_PRE_V1:
            error_msg = "Invalid cluster_size"
            logger.warning(error_msg)
            return make_fail_resp(error=error_msg)
        else:
            condition["size"] = cluster_size

    logger.debug("condition={}".format(condition))
    c = cluster_handler.apply_cluster(user_id=user_id,
                                      condition=condition,
                                      allow_multiple=allow_multiple)
    if not c:
        error_msg = "No available res for {}".format(user_id)
        logger.warning(error_msg)
        return make_fail_resp(error=error_msg)
    else:
        return make_ok_resp(data=c)
Esempio n. 12
0
def cluster_stop(r):
    """Stop a cluster which should be in running status currently.

    :param r:
    :return:
    """
    cluster_id = request_get(r, "cluster_id")
    if not cluster_id:
        logger.warning("No cluster_id is given")
        return make_fail_resp("No cluster_id is given")
    if cluster_handler.stop(cluster_id):
        return make_ok_resp()

    return make_fail_resp("cluster stop failed")
Esempio n. 13
0
def cluster_apply_dep():
    """
    Return a Cluster json body.
    """
    request_debug(r, logger)

    user_id = request_get(r, "user_id")
    if not user_id:
        error_msg = "cluster_apply without user_id"
        logger.warning(error_msg)
        return make_fail_resp(error=error_msg)

    allow_multiple, condition = request_get(r, "allow_multiple"), {}

    consensus_plugin = request_get(r, "consensus_plugin")
    consensus_mode = request_get(r, "consensus_mode")
    cluster_size = int(request_get(r, "size") or -1)
    if consensus_plugin:
        if consensus_plugin not in CONSENSUS_PLUGINS_FABRIC_V1:
            error_msg = "Invalid consensus_plugin"
            logger.warning(error_msg)
            return make_fail_resp(error=error_msg)
        else:
            condition["consensus_plugin"] = consensus_plugin

    if consensus_mode:
        if consensus_mode not in CONSENSUS_MODES:
            error_msg = "Invalid consensus_mode"
            logger.warning(error_msg)
            return make_fail_resp(error=error_msg)
        else:
            condition["consensus_mode"] = consensus_mode

    if cluster_size >= 0:
        if cluster_size not in NETWORK_SIZE_FABRIC_PRE_V1:
            error_msg = "Invalid cluster_size"
            logger.warning(error_msg)
            return make_fail_resp(error=error_msg)
        else:
            condition["size"] = cluster_size

    logger.debug("condition={}".format(condition))
    c = cluster_handler.apply_cluster(user_id=user_id, condition=condition,
                                      allow_multiple=allow_multiple)
    if not c:
        error_msg = "No available res for {}".format(user_id)
        logger.warning(error_msg)
        return make_fail_resp(error=error_msg)
    else:
        return make_ok_resp(data=c)
Esempio n. 14
0
def cluster_release(r):
    """Release a cluster which should be in used status currently.

    :param r:
    :return:
    """
    cluster_id = request_get(r, "cluster_id")
    if not cluster_id:
        logger.warning("No cluster_id is given")
        return make_fail_resp("No cluster_id is given")
    if cluster_handler.release_cluster(cluster_id):
        return make_ok_resp()

    return make_fail_resp("cluster release failed")
Esempio n. 15
0
def cluster_stop(r):
    """Stop a cluster which should be in running status currently.

    :param r:
    :return:
    """
    cluster_id = request_get(r, "cluster_id")
    if not cluster_id:
        logger.warning("No cluster_id is given")
        return make_fail_resp("No cluster_id is given")
    if cluster_handler.stop(cluster_id):
        return make_ok_resp()

    return make_fail_resp("cluster stop failed")
Esempio n. 16
0
def cluster_release(r):
    """Release a cluster which should be in used status currently.

    :param r:
    :return:
    """
    cluster_id = request_get(r, "cluster_id")
    if not cluster_id:
        logger.warning("No cluster_id is given")
        return make_fail_resp("No cluster_id is given")
    if cluster_handler.release_cluster(cluster_id):
        return make_ok_resp()

    return make_fail_resp("cluster release failed")
Esempio n. 17
0
def host_actions():
    logger.info("/host_op, method=" + r.method)
    request_debug(r, logger)
    if r.content_type.startswith("application/json"):
        body = dict(r.get_json(force=True, silent=True))
    else:
        body = r.form

    host_id, action = body['id'], body['action']
    if not host_id or not action:
        error_msg = "host POST without enough data"
        logger.warning(error_msg)
        return make_fail_resp(error=error_msg, data=body)
    else:
        if action == "fillup":
            if host_handler.fillup(host_id):
                logger.debug("fillup successfully")
                return make_ok_resp()
            else:
                error_msg = "Failed to fillup the host."
                logger.warning(error_msg)
                return make_fail_resp(error=error_msg, data=body)
        elif action == "clean":
            if host_handler.clean(host_id):
                logger.debug("clean successfully")
                return make_ok_resp()
            else:
                error_msg = "Failed to clean the host."
                logger.warning(error_msg)
                return make_fail_resp(error=error_msg, data=body)
        elif action == "reset":
            if host_handler.reset(host_id):
                logger.debug("reset successfully")
                try:
                    host_model = HostModel.Query.get(id=host_id)
                    clusters = ClusterModel.Query.\
                        filter(host=host_model.as_pointer)
                    for cluster_item in clusters:
                        cluster_item.delete()
                except Exception:
                    pass
                return make_ok_resp()
            else:
                error_msg = "Failed to reset the host."
                logger.warning(error_msg)
                return make_fail_resp(error=error_msg, data=body)

    error_msg = "unknown host action={}".format(action)
    logger.warning(error_msg)
    return make_fail_resp(error=error_msg, data=body)
Esempio n. 18
0
def cluster_actions():
    """Issue some operations on the cluster.
    Valid operations include: apply, release, start, stop, restart
    e.g.,
    apply a cluster for user: GET /cluster_op?action=apply&user_id=xxx
    release a cluster: GET /cluster_op?action=release&cluster_id=xxx
    start a cluster: GET /cluster_op?action=start&cluster_id=xxx
    stop a cluster: GET /cluster_op?action=stop&cluster_id=xxx
    restart a cluster: GET /cluster_op?action=restart&cluster_id=xxx

    Return a json obj.
    """
    request_debug(r, logger)
    action = request_get(r, "action")
    logger.info("cluster_op with action={}".format(action))
    if action == "apply":
        return cluster_apply(r)
    elif action == "release":
        return cluster_release(r)
    elif action == "start":
        return cluster_start(r)
    elif action == "stop":
        return cluster_stop(r)
    elif action == "restart":
        return cluster_restart(r)
    else:
        return make_fail_resp(error="Unknown action type")
Esempio n. 19
0
def cluster_delete():
    """Delete a cluster

    DELETE /cluster
    {
        id: xxx
        col_name: active
    }

    :return: response obj
    """
    logger.info("/cluster action=" + r.method)
    request_data = r.get_json(force=True, silent=True)
    if r.form:
        cluster_id = r.form["id"]
        col_name = r.form["col_name"]
    else:
        cluster_id = request_data.get("id")
        col_name = request_data.get("col_name")
    request_debug(r, logger)
    if not cluster_id or not col_name:
        error_msg = "cluster operation post without enough data"
        logger.warning(error_msg)
        return make_fail_resp(error=error_msg, data=r.form)
    else:
        logger.debug("cluster delete with id={0}, col_name={1}".format(
            cluster_id, col_name))
        delete_cluster.delay(cluster_id, col_name)
        return make_ok_resp()
Esempio n. 20
0
def cluster_actions():
    """Issue some operations on the cluster.
    Valid operations include: apply, release, start, stop, restart
    e.g.,
    apply a cluster for user: GET /cluster_op?action=apply&user_id=xxx
    release a cluster: GET /cluster_op?action=release&cluster_id=xxx
    start a cluster: GET /cluster_op?action=start&cluster_id=xxx
    stop a cluster: GET /cluster_op?action=stop&cluster_id=xxx
    restart a cluster: GET /cluster_op?action=restart&cluster_id=xxx

    Return a json obj.
    """
    request_debug(r, logger)
    action = request_get(r, "action")
    logger.info("cluster_op with action={}".format(action))
    if action == "apply":
        return cluster_apply(r)
    elif action == "release":
        return cluster_release(r)
    elif action == "start":
        return cluster_start(r)
    elif action == "stop":
        return cluster_stop(r)
    elif action == "restart":
        return cluster_restart(r)
    else:
        return make_fail_resp(error="Unknown action type")
Esempio n. 21
0
    def put(self):
        request_debug(r, logger)
        # if r.content_type.startswith("application/json"):
        #     body = dict(r.get_json(force=True, silent=True))
        # else:
        #     body = r.form
        # if "id" not in body:
        #     error_msg = "host PUT without enough data"
        #     logger.warning(error_msg)
        #     return make_fail_resp(error=error_msg,
        #                           data=body)
        # else:
        #     id, d = body["id"], {}
        #     for k in body:
        #         if k != "id":
        #             d[k] = body.get(k)
        args = host_update_parser.parse_args()
        id, d = args.get('host_id'), {}
        name = args.get('host_name')

        if name:
            d['name'] = name
        for k, v in args.items():
            if k not in ["host_id", 'host_name'] and v:
                d[k] = args.get(k)

        result = host_handler.update(id, d)
        if result:
            logger.debug("host PUT successfully")
            return make_ok_resp()
        else:
            error_msg = "Failed to update host {}".format(result.get("name"))
            logger.warning(error_msg)
            return make_fail_resp(error=error_msg)
Esempio n. 22
0
def host_actions():
    logger.info("/host_op, method=" + r.method)
    request_debug(r, logger)

    host_id, action = r.form['id'], r.form['action']
    if not host_id or not action:
        error_msg = "host POST without enough data"
        logger.warning(error_msg)
        return make_fail_resp(error=error_msg,
                              data=r.form)
    else:
        if action == "fillup":
            if host_handler.fillup(host_id):
                logger.debug("fillup successfully")
                return make_ok_resp()
            else:
                error_msg = "Failed to fillup the host."
                logger.warning(error_msg)
                return make_fail_resp(error=error_msg, data=r.form)
        elif action == "clean":
            if host_handler.clean(host_id):
                logger.debug("clean successfully")
                return make_ok_resp()
            else:
                error_msg = "Failed to clean the host."
                logger.warning(error_msg)
                return make_fail_resp(error=error_msg, data=r.form)
        elif action == "reset":
            if host_handler.reset(host_id):
                logger.debug("reset successfully")
                try:
                    host_model = HostModel.objects.get(id=host_id)
                    clusters = ClusterModel.objects(host=host_model)
                    for cluster_item in clusters:
                        cluster_item.delete()
                except Exception:
                    pass
                return make_ok_resp()
            else:
                error_msg = "Failed to reset the host."
                logger.warning(error_msg)
                return make_fail_resp(error=error_msg, data=r.form)

    error_msg = "unknown host action={}".format(action)
    logger.warning(error_msg)
    return make_fail_resp(error=error_msg, data=r.form)
Esempio n. 23
0
def host_actions():
    logger.info("/host_op, method=" + r.method)
    request_debug(r, logger)

    host_id, action = r.form['id'], r.form['action']
    if not host_id or not action:
        error_msg = "host POST without enough data"
        logger.warning(error_msg)
        return make_fail_resp(error=error_msg, data=r.form)
    else:
        if action == "fillup":
            if host_handler.fillup(host_id):
                logger.debug("fillup successfully")
                return make_ok_resp()
            else:
                error_msg = "Failed to fillup the host."
                logger.warning(error_msg)
                return make_fail_resp(error=error_msg, data=r.form)
        elif action == "clean":
            if host_handler.clean(host_id):
                logger.debug("clean successfully")
                return make_ok_resp()
            else:
                error_msg = "Failed to clean the host."
                logger.warning(error_msg)
                return make_fail_resp(error=error_msg, data=r.form)
        elif action == "reset":
            if host_handler.reset(host_id):
                logger.debug("reset successfully")
                try:
                    host_model = HostModel.objects.get(id=host_id)
                    clusters = ClusterModel.objects(host=host_model)
                    for cluster_item in clusters:
                        cluster_item.delete()
                except Exception:
                    pass
                return make_ok_resp()
            else:
                error_msg = "Failed to reset the host."
                logger.warning(error_msg)
                return make_fail_resp(error=error_msg, data=r.form)

    error_msg = "unknown host action={}".format(action)
    logger.warning(error_msg)
    return make_fail_resp(error=error_msg, data=r.form)
Esempio n. 24
0
def register():
    request_debug(r, logger)
    if not r.form["username"] or not r.form["password"]:
        error_msg = "register without enough data"
        logger.warning(error_msg)
        return make_fail_resp(error=error_msg, data=r.form)

    username, password = r.form["username"], r.form["password"]
    salt = app.config.get("SALT", b"")
    password = bcrypt.hashpw(password.encode('utf8'), bytes(salt.encode()))

    try:
        user = User(username, password)
        user.save()
        return make_ok_resp(code=CODE_CREATED)
    except Exception as exc:
        logger.info("exc %s", exc)
        return make_fail_resp(error="register failed")
Esempio n. 25
0
def host_query(host_id):
    request_debug(r, logger)
    result = host_handler.get_by_id(host_id)
    logger.debug(result)
    if result:
        return make_ok_resp(data=result)
    else:
        error_msg = "host not found with id=" + host_id
        logger.warning(error_msg)
        return make_fail_resp(error=error_msg, data=r.form)
Esempio n. 26
0
def host_delete():
    request_debug(r, logger)
    request_data = r.get_json(force=True, silent=True)
    if "id" in r.form:
        host_id = r.form["id"]
    elif "id" in request_data:
        host_id = request_data.get("id")
    else:
        error_msg = "host delete without enough data"
        logger.warning(error_msg)
        return make_fail_resp(error=error_msg, data=r.form)

    logger.debug("host delete with id={0}".format(host_id))
    if host_handler.delete(id=host_id):
        return make_ok_resp()
    else:
        error_msg = "Failed to delete host {}".format(host_id)
        logger.warning(error_msg)
        return make_fail_resp(error=error_msg)
Esempio n. 27
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)
Esempio n. 28
0
def host_delete():
    request_debug(r, logger)
    request_data = r.get_json(force=True, silent=True)
    if "id" in r.form:
        host_id = r.form["id"]
    elif "id" in request_data:
        host_id = request_data.get("id")
    else:
        error_msg = "host delete without enough data"
        logger.warning(error_msg)
        return make_fail_resp(error=error_msg, data=r.form)

    logger.debug("host delete with id={0}".format(host_id))
    if host_handler.delete(id=host_id):
        return make_ok_resp()
    else:
        error_msg = "Failed to delete host {}".format(host_id)
        logger.warning(error_msg)
        return make_fail_resp(error=error_msg)
Esempio n. 29
0
def host_update():
    request_debug(r, logger)
    if "id" not in r.form:
        error_msg = "host PUT without enough data"
        logger.warning(error_msg)
        return make_fail_resp(error=error_msg, data=r.form)
    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 make_ok_resp()
        else:
            error_msg = "Failed to update host {}".format(result.get("name"))
            logger.warning(error_msg)
            return make_fail_resp(error=error_msg)
Esempio n. 30
0
def host_query(host_id):
    request_debug(r, logger)
    result = host_handler.schema(host_handler.get_by_id(host_id))
    logger.debug(result)
    if result:
        return make_ok_resp(data=result)
    else:
        error_msg = "host not found with id=" + host_id
        logger.warning(error_msg)
        return make_fail_resp(error=error_msg, data=r.form)
Esempio n. 31
0
def host_update():
    request_debug(r, logger)
    if "id" not in r.form:
        error_msg = "host PUT without enough data"
        logger.warning(error_msg)
        return make_fail_resp(error=error_msg,
                              data=r.form)
    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 make_ok_resp()
        else:
            error_msg = "Failed to update host {}".format(result.get("name"))
            logger.warning(error_msg)
            return make_fail_resp(error=error_msg)
Esempio n. 32
0
def update_user(user_id):
    request_debug(r, logger)
    if not r.form["username"] or not r.form["password"] \
            or not r.form["role"]:
        error_msg = "create user without enough data"
        logger.warning(error_msg)
        return make_fail_resp(error=error_msg, data=r.form)

    username, role = r.form["username"], int(r.form["role"])
    active = r.form["active"]
    active = active == "true"
    try:
        UserModel.objects(id=user_id).update(set__username=username,
                                             set__active=active,
                                             set__role=role, upsert=True)
    except Exception as exc:
        error_msg = exc.message
        logger.warning(error_msg)
        return make_fail_resp(error=error_msg, data=r.form)

    return make_ok_resp(data={})
Esempio n. 33
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)
Esempio n. 34
0
def update_user(user_id):
    request_debug(r, logger)
    if not r.form["username"] or not r.form["password"] \
            or not r.form["role"]:
        error_msg = "create user without enough data"
        logger.warning(error_msg)
        return make_fail_resp(error=error_msg, data=r.form)

    username, role = r.form["username"], int(r.form["role"])
    active = r.form["active"]
    active = active == "true"
    try:
        UserModel.objects(id=user_id).update(set__username=username,
                                             set__active=active,
                                             set__role=role,
                                             upsert=True)
    except Exception as exc:
        error_msg = exc.message
        logger.warning(error_msg)
        return make_fail_resp(error=error_msg, data=r.form)

    return make_ok_resp(data={})
Esempio n. 35
0
def login():
    if not r.form["username"] or not r.form["password"]:
        error_msg = "login without enough data"
        logger.warning(error_msg)
        return make_fail_resp(error=error_msg, data={'success': False})

    username, password = r.form["username"], r.form["password"]
    user_obj = User()
    try:
        user = user_obj.get_by_username_w_password(username)
        if user.is_admin() and \
                bcrypt.checkpw(password.encode('utf8'),
                               bytes(user.password.encode())):
            login_user(user)
            return make_ok_resp(data={'success': True,
                                      'next': url_for('bp_index.show')},
                                code=CODE_CREATED)
        else:
            return make_fail_resp(error="login failed",
                                  data={'success': False})
    except Exception:
        return make_fail_resp(error="login failed", data={'success': False})
Esempio n. 36
0
def create_user():
    request_debug(r, logger)
    if not r.form["username"] or not r.form["password"] \
            or not r.form["role"]:
        error_msg = "create user without enough data"
        logger.warning(error_msg)
        return make_fail_resp(error=error_msg, data=r.form)

    username, password = r.form["username"], r.form["password"]
    role, active = int(r.form["role"]), r.form["active"]
    active = active == "true"
    salt = app.config.get("SALT", b"")
    password = bcrypt.hashpw(password.encode('utf8'), bytes(salt.encode()))

    try:
        user = User(username, password, is_admin=role == ADMIN,
                    role=role, active=active)
        user.save()
        return make_ok_resp(code=CODE_CREATED)
    except Exception as exc:
        logger.info("exc %s", exc)
        return make_fail_resp(error="create user failed")
Esempio n. 37
0
def host_actions():
    logger.info("/host_op, method=" + r.method)
    request_debug(r, logger)

    host_id, action = r.form['id'], r.form['action']
    if not host_id or not action:
        error_msg = "host POST without enough data"
        logger.warning(error_msg)
        return make_fail_resp(error=error_msg,
                              data=r.form)
    else:
        if action == "fillup":
            if host_handler.fillup(host_id):
                logger.debug("fillup successfully")
                return make_ok_resp()
            else:
                error_msg = "Failed to fillup the host."
                logger.warning(error_msg)
                return make_fail_resp(error=error_msg, data=r.form)
        elif action == "clean":
            if host_handler.clean(host_id):
                logger.debug("clean successfully")
                return make_ok_resp()
            else:
                error_msg = "Failed to clean the host."
                logger.warning(error_msg)
                return make_fail_resp(error=error_msg, data=r.form)
        elif action == "reset":
            if host_handler.reset(host_id):
                logger.debug("reset successfully")
                return make_ok_resp()
            else:
                error_msg = "Failed to reset the host."
                logger.warning(error_msg)
                return make_fail_resp(error=error_msg, data=r.form)

    error_msg = "unknown host action={}".format(action)
    logger.warning(error_msg)
    return make_fail_resp(error=error_msg, data=r.form)
Esempio n. 38
0
def host_actions():
    logger.info("/host_op, method=" + r.method)
    request_debug(r, logger)

    host_id, action = r.form['id'], r.form['action']
    if not host_id or not action:
        error_msg = "host POST without enough data"
        logger.warning(error_msg)
        return make_fail_resp(error=error_msg, data=r.form)
    else:
        if action == "fillup":
            if host_handler.fillup(host_id):
                logger.debug("fillup successfully")
                return make_ok_resp()
            else:
                error_msg = "Failed to fillup the host."
                logger.warning(error_msg)
                return make_fail_resp(error=error_msg, data=r.form)
        elif action == "clean":
            if host_handler.clean(host_id):
                logger.debug("clean successfully")
                return make_ok_resp()
            else:
                error_msg = "Failed to clean the host."
                logger.warning(error_msg)
                return make_fail_resp(error=error_msg, data=r.form)
        elif action == "reset":
            if host_handler.reset(host_id):
                logger.debug("reset successfully")
                return make_ok_resp()
            else:
                error_msg = "Failed to reset the host."
                logger.warning(error_msg)
                return make_fail_resp(error=error_msg, data=r.form)

    error_msg = "unknown host action={}".format(action)
    logger.warning(error_msg)
    return make_fail_resp(error=error_msg, data=r.form)
Esempio n. 39
0
    def post(self):
        user = utils._get_user()
        user = user.dbUser
        user_id = str(user.id)
        args = org_create_parser.parse_args()
        org_name = args.get('name')
        org_domain = args.get('domain')
        org_ca = args.get('ca', 'ca')
        org_peers = args.get('peers')
        org_cluster_id = args.get('cluster_id')

        if not all([org_name, org_domain, org_ca, org_peers, org_cluster_id]):
            return make_fail_resp(error='参数错误')

        cluster = ClusterModel.objects.get(id=org_cluster_id)
        if not cluster:
            return make_fail_resp(error='链不存在')

        orgs = OrgModel.objects(cluster=cluster, org_type='peer')
        if len(orgs) >= 5:
            return make_fail_resp(error='组织数量已达上限')
        for org in orgs:
            if org.name == org_name:
                # if OrgModel.objects(cluster=cluster, org_type='peer', name=org_name):
                return make_fail_resp(error='组织名重复')

        if OrganizationHandler().create(name=org_name,
                                        domain=org_domain,
                                        ca=org_ca,
                                        peers=org_peers,
                                        cluster=cluster,
                                        user=user_id):
            logger.debug("org creation successful")
            return make_ok_resp()
        else:
            logger.debug("org creation failed")
            return make_fail_resp(
                error="Failed to create org {}".format(org_name))
Esempio n. 40
0
def host_update():
    request_debug(r, logger)
    if r.content_type.startswith("application/json"):
        body = dict(r.get_json(force=True, silent=True))
    else:
        body = r.form
    if "id" not in body:
        error_msg = "host PUT without enough data"
        logger.warning(error_msg)
        return make_fail_resp(error=error_msg, data=body)
    else:
        id, d = body["id"], {}
        for k in body:
            if k != "id":
                d[k] = body.get(k)
        result = host_handler.update(id, d)
        if result:
            logger.debug("host PUT successfully")
            return make_ok_resp()
        else:
            error_msg = "Failed to update host {}".format(result.get("name"))
            logger.warning(error_msg)
            return make_fail_resp(error=error_msg)
Esempio n. 41
0
def cluster_query(cluster_id):
    """Query a json obj of a cluster

    GET /cluster/xxxx

    Return a json obj of the cluster.
    """
    request_debug(r, logger)
    result = cluster_handler.get_by_id(cluster_id)
    if result:
        return make_ok_resp(data=result)
    else:
        error_msg = "cluster not found with id=" + cluster_id
        logger.warning(error_msg)
        return make_fail_resp(error=error_msg, data=r.form,
                              code=CODE_NOT_FOUND)
Esempio n. 42
0
def organization_update(organization_id):
    request_debug(r, logger)
    if r.content_type.startswith("application/json"):
        body = dict(r.get_json(force=True, silent=True))
    else:
        body = r.form

    id = organization_id

    peerNum = body["peerNum"]

    result = org_handler().update(id, peerNum)
    if result:
        logger.debug("organization PUT successfully")
        return make_ok_my_resp(resource='organization', result=result)
    else:
        error_msg = "Failed to update organization {}".format(
            result.get("name"))
        logger.warning(error_msg)
        return make_fail_resp(error=error_msg)
Esempio n. 43
0
 def delete(self):
     """Delete a cluster
     #
     #     DELETE /cluster
     #     {
     #         id: xxx
     #         col_name: active
     #     }
     #
     #     :return: response obj
     #     """
     logger.info("/cluster action=" + r.method)
     # request_data = r.get_json(force=True, silent=True)
     # if r.form:
     #     cluster_id = r.form["id"]
     #     col_name = r.form["col_name"]
     # else:
     #     cluster_id = request_data.get("id")
     #     col_name = request_data.get("col_name")
     # request_debug(r, logger)
     args = cluster_delete_parser.parse_args()
     cluster_id = args.get('cluster_id')
     # col_name = args.get('state')
     if not cluster_id:
         error_msg = "缺少参数"
         logger.warning(error_msg)
         return make_fail_resp(error=error_msg)
     else:
         logger.debug("cluster delete with id={0}".format(cluster_id))
         try:
             cluster = ClusterModel.objects.get(id=cluster_id)
         except Exception as e:
             logger.error(e)
             return {'stat': 400, 'msg': '不存在'}
         # status = cluster.state
         delete_cluster(cluster_id=cluster_id, status='active')
         return make_ok_resp()
Esempio n. 44
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)
Esempio n. 45
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)