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
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
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()
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")
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)
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}
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))
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))
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))
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)
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")
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)
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")
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)
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")
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()
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)
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)
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")
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)
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)
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)
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)
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)
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={})
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)
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})
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)
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))
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)
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)
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)
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()
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)
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)