Пример #1
0
def cluster_delete():
    """Delete a cluster

    DELETE /cluster
    {
        id: xxx
        col_name: active
    }

    :return: response obj
    """
    logger.info("/cluster action=" + r.method)
    request_debug(r, logger)
    if not r.form["id"] or not r.form["col_name"]:
        error_msg = "cluster operation post without enough data"
        logger.warning(error_msg)
        return make_fail_response(error=error_msg, data=r.form)
    else:
        logger.debug("cluster delete with id={0}, col_name={1}".format(
            r.form["id"], r.form["col_name"]))
        if r.form["col_name"] == "active":
            result = cluster_handler.delete(id=r.form["id"])
        else:
            result = cluster_handler.delete_released(id=r.form["id"])
        if result:
            return make_ok_response()
        else:
            error_msg = "Failed to delete cluster {}".format(r.form["id"])
            logger.warning(error_msg)
            return make_fail_response(error=error_msg)
Пример #2
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_response(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_response(error=error_msg, data=data)
        else:
            return make_ok_response()
Пример #3
0
def hosts_list():
    logger.info("/hosts_list method=" + r.method)
    request_debug(r, logger)
    col_filter = dict((key, r.args.get(key)) for key in r.args)
    items = list(host_handler.list(filter_data=col_filter))

    return make_ok_response(data=items)
Пример #4
0
def cluster_delete():
    """Delete a cluster

    DELETE /cluster
    {
        id: xxx
        col_name: active
    }

    :return: response obj
    """
    logger.info("/cluster action=" + r.method)
    request_debug(r, logger)
    if not r.form["id"] or not r.form["col_name"]:
        error_msg = "cluster operation post without enough data"
        logger.warning(error_msg)
        return make_fail_response(error=error_msg, data=r.form)
    else:
        logger.debug("cluster delete with id={0}, col_name={1}".format(
            r.form["id"], r.form["col_name"]))
        if r.form["col_name"] == "active":
            result = cluster_handler.delete(id=r.form["id"])
        else:
            result = cluster_handler.delete_released(id=r.form["id"])
        if result:
            return make_ok_response()
        else:
            error_msg = "Failed to delete cluster {}".format(r.form["id"])
            logger.warning(error_msg)
            return make_fail_response(error=error_msg)
Пример #5
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_response(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_response(error=error_msg, data=data)
        else:
            return make_ok_response()
Пример #6
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_response(data=result)
    else:
        error_msg = "host not found with id=" + host_id
        logger.warning(error_msg)
        return make_fail_response(error=error_msg, data=r.form)
Пример #7
0
def cluster_create():
    """Create a cluster on a host

    POST /cluster
    {
    name: xxx,
    host_id: xxx,
    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["fabric_version"] \
            or not r.form["consensus_plugin"] or not r.form["size"]:
        error_msg = "cluster post without enough data"
        logger.warning(error_msg)
        return make_fail_response(error=error_msg, data=r.form)
    else:
        name, host_id, fabric_version, consensus_plugin, \
            consensus_mode, size = r.form['name'], r.form['host_id'], \
            r.form['fabric_version'], r.form['consensus_plugin'], \
            r.form['consensus_mode'] or '', int(r.form["size"])
        if consensus_plugin not in CONSENSUS_PLUGINS:
            logger.debug(
                "Unknown consensus_plugin={}".format(consensus_plugin))
            return make_fail_response()
        if consensus_plugin != CONSENSUS_PLUGINS[0] \
           and consensus_plugin != CONSENSUS_PLUGINS[2] \
           and consensus_mode not in CONSENSUS_MODES:
            logger.debug("Invalid consensus, plugin={}, mode={}".format(
                consensus_plugin, consensus_mode))
            return make_fail_response()

        if size not in CLUSTER_SIZES:
            logger.debug("Unknown cluster size={}".format(size))
            return make_fail_response()
        if cluster_handler.create(name=name,
                                  host_id=host_id,
                                  fabric_version=fabric_version,
                                  consensus_plugin=consensus_plugin,
                                  consensus_mode=consensus_mode,
                                  size=size):
            logger.debug("cluster POST successfully")
            return make_ok_response(code=CODE_CREATED)
        else:
            logger.debug("cluster creation failed")
            return make_fail_response(
                error="Failed to create cluster {}".format(name))
Пример #8
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_response(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_response(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_response(error=error_msg)
        else:
            condition["consensus_mode"] = consensus_mode

    if cluster_size >= 0:
        if cluster_size not in CLUSTER_SIZES:
            error_msg = "Invalid cluster_size"
            logger.warning(error_msg)
            return make_fail_response(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_response(error=error_msg)
    else:
        return make_ok_response(data=c)
Пример #9
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_response(error=error_msg, data=r.form)
    else:
        if action == "fillup":
            if host_handler.fillup(host_id):
                logger.debug("fillup successfully")
                return make_ok_response()
            else:
                error_msg = "Failed to fillup the host."
                logger.warning(error_msg)
                return make_fail_response(error=error_msg, data=r.form)
        elif action == "clean":
            if host_handler.clean(host_id):
                logger.debug("clean successfully")
                return make_ok_response()
            else:
                error_msg = "Failed to clean the host."
                logger.warning(error_msg)
                return make_fail_response(error=error_msg, data=r.form)
        elif action == "reset":
            if host_handler.reset(host_id):
                logger.debug("reset successfully")
                return make_ok_response()
            else:
                error_msg = "Failed to reset the host."
                logger.warning(error_msg)
                return make_fail_response(error=error_msg, data=r.form)

    error_msg = "unknown host action={}".format(action)
    logger.warning(error_msg)
    return make_fail_response(error=error_msg, data=r.form)
Пример #10
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_response("No cluster_id is given")
    if cluster_handler.stop(cluster_id):
        return make_ok_response()

    return make_fail_response("cluster stop failed")
Пример #11
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_response("No cluster_id is given")
    if cluster_handler.release_cluster(cluster_id):
        return make_ok_response()

    return make_fail_response("cluster release failed")
Пример #12
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_response(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_response(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_response(error=error_msg)
        else:
            condition["consensus_mode"] = consensus_mode

    if cluster_size >= 0:
        if cluster_size not in CLUSTER_SIZES:
            error_msg = "Invalid cluster_size"
            logger.warning(error_msg)
            return make_fail_response(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_response(error=error_msg)
    else:
        return make_ok_response(data=c)
Пример #13
0
def host_delete():
    request_debug(r, logger)
    if "id" not in r.form or not r.form["id"]:
        error_msg = "host delete without enough data"
        logger.warning(error_msg)
        return make_fail_response(error=error_msg, data=r.form)
    else:
        logger.debug("host delete with id={0}".format(r.form["id"]))
        if host_handler.delete(id=r.form["id"]):
            return make_ok_response()
        else:
            error_msg = "Failed to delete host {}".format(r.form["id"])
            logger.warning(error_msg)
            return make_fail_response(error=error_msg)
Пример #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_response("No cluster_id is given")
    if cluster_handler.release_cluster(cluster_id):
        return make_ok_response()

    return make_fail_response("cluster release failed")
Пример #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_response("No cluster_id is given")
    if cluster_handler.stop(cluster_id):
        return make_ok_response()

    return make_fail_response("cluster stop failed")
Пример #16
0
def cluster_create():
    """Create a cluster on a host

    POST /cluster
    {
    name: xxx,
    host_id: xxx,
    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["consensus_plugin"] or not r.form["size"]:
        error_msg = "cluster post without enough data"
        logger.warning(error_msg)
        return make_fail_response(error=error_msg, data=r.form)
    else:
        name, host_id, consensus_plugin, consensus_mode, size = \
            r.form['name'], r.form['host_id'], r.form['consensus_plugin'],\
            r.form['consensus_mode'] or '', int(r.form[
                "size"])
        if consensus_plugin not in CONSENSUS_PLUGINS:
            logger.debug("Unknown consensus_plugin={}".format(
                consensus_plugin))
            return make_fail_response()
        if consensus_plugin != CONSENSUS_PLUGINS[0] and consensus_mode \
                not in CONSENSUS_MODES:
            logger.debug("Invalid consensus, plugin={}, mode={}".format(
                consensus_plugin, consensus_mode))
            return make_fail_response()

        if size not in CLUSTER_SIZES:
            logger.debug("Unknown cluster size={}".format(size))
            return make_fail_response()
        if cluster_handler.create(name=name, host_id=host_id,
                                  consensus_plugin=consensus_plugin,
                                  consensus_mode=consensus_mode,
                                  size=size):
            logger.debug("cluster POST successfully")
            return make_ok_response(code=CODE_CREATED)
        else:
            logger.debug("cluster creation failed")
            return make_fail_response(error="Failed to create cluster {}".
                                      format(name))
Пример #17
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)
    logger.info(result)
    if result:
        return make_ok_response(data=result)
    else:
        error_msg = "cluster not found with id=" + cluster_id
        logger.warning(error_msg)
        return make_fail_response(error=error_msg, data=r.form,
                                  code=CODE_NOT_FOUND)
Пример #18
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)
    logger.info(result)
    if result:
        return make_ok_response(data=result)
    else:
        error_msg = "cluster not found with id=" + cluster_id
        logger.warning(error_msg)
        return make_fail_response(error=error_msg,
                                  data=r.form,
                                  code=CODE_NOT_FOUND)
Пример #19
0
def cluster_list():
    """List clusters with the filter
    e.g.,

    GET /clusters?consensus_plugin=pbft

    Return objs of the clusters.
    """
    request_debug(r, logger)
    f = {}
    if r.method == 'GET':
        f.update(r.args.to_dict())
    elif r.method == 'POST':
        f.update(request_json_body(r))
    logger.info(f)
    result = cluster_handler.list(filter_data=f)
    logger.error(result)
    return make_ok_response(data=result)
Пример #20
0
def cluster_list():
    """List clusters with the filter
    e.g.,

    GET /clusters?consensus_plugin=pbft

    Return objs of the clusters.
    """
    request_debug(r, logger)
    f = {}
    if r.method == 'GET':
        f.update(r.args.to_dict())
    elif r.method == 'POST':
        f.update(request_json_body(r))
    logger.info(f)
    result = cluster_handler.list(filter_data=f)
    logger.error(result)
    return make_ok_response(data=result)
Пример #21
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_response(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_response()
    else:
        error_msg = "Failed to delete host {}".format(host_id)
        logger.warning(error_msg)
        return make_fail_response(error=error_msg)
Пример #22
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_response(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_response()
        else:
            error_msg = "Failed to update host {}".format(result.get("name"))
            logger.warning(error_msg)
            return make_fail_response(error=error_msg)
Пример #23
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)
Пример #24
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_response(error=error_msg, data=r.form)
    else:
        logger.debug("cluster delete with id={0}, col_name={1}".format(
            cluster_id, col_name))
        if col_name == "active":
            result = cluster_handler.delete(id=cluster_id)
        else:
            result = cluster_handler.delete_released(id=cluster_id)
        if result:
            return make_ok_response()
        else:
            error_msg = "Failed to delete cluster {}".format(cluster_id)
            logger.warning(error_msg)
            return make_fail_response(error=error_msg)