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)
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()
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)
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)
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))
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)
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)
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")
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")
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)
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))
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)
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)
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)
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)
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)
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)