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_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 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 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)
def post(self): request_debug(r, logger) args = host_create_parser.parse_args() name = args.get('host_name') worker_api = args.get('worker_api') capacity = args.get('capacity') host_type = args.get('host_type') if host_type != "docker": return {'stat': 20001, 'msg': '后续开放'} # vcaddress = args['vc_address'] # if vcaddress.find(":") == -1: # address = vcaddress # port = "443" # else: # address = vcaddress.split(':')[0] # port = vcaddress.split(':')[1] # logger.debug("address={}, port={}".format(address, port)) # # vmname = "cello-vsphere-" + str(uuid.uuid1()) # vsphere_param = { # 'vc': { # 'address': address, # 'port': port, # 'username': args['vc_user'], # 'password': args['vc_password'], # 'network': args['vc_network'], # 'vc_datastore': args['datastore'], # 'vc_datacenter': args['datacenter'], # 'vc_cluster': args['cluster'], # 'template': args['vm_template']}, # 'vm': { # 'vmname': vmname, # 'ip': args['vm_ip'], # 'gateway': args['vm_gateway'], # 'netmask': args['vm_netmask'], # 'dns': args['vm_dns'], # 'vcpus': int(args['vm_cpus']), # 'memory': int(args['vm_memory'])}} # # vsphere_must_have_params = { # 'Name': name, # 'Capacity': capacity, # 'VCAddress': address, # 'VCUser': args['vc_user'], # 'VCPassword': args['vc_password'], # 'VCNetwork': args['vc_network'], # 'Datastore': args['datastore'], # 'Datacenter': args['datacenter'], # 'Cluster': args['cluster'], # 'VMIp': args['vm_ip'], # 'VMGateway': args['vm_gateway'], # 'VMNetmask': args['vm_netmask']} # for key in vsphere_must_have_params: # if vsphere_must_have_params[key] == '': # error_msg = "host POST without {} data".format(key) # logger.warning(error_msg) # return make_fail_resp(error=error_msg, data=args) # result = host_handler.create(name=name, worker_api=worker_api, # capacity=int(capacity), # autofill=autofill, # schedulable=schedulable, # log_level=log_level, # log_type=log_type, # log_server=log_server, # host_type=host_type, # params=vsphere_param) # elif host_type == 'kubernetes': # return {'stat': 20001, 'msg': '后续开放'} # # worker_api = body['worker_api'] # k8s_param = create_k8s_host(name, capacity, log_type, body) # if len(k8s_param) == 0: # return make_fail_resp(error=error_msg, data=r.form) # # logger.debug("name={}, worker_api={}, capacity={}," # "fillup={}, schedulable={}, log={}/{}, k8s_param={}". # format(name, worker_api, capacity, autofill, # schedulable, log_type, log_server, k8s_param)) # # result = host_handler.create(name=name, worker_api=worker_api, # capacity=int(capacity), # autofill=autofill, # schedulable=schedulable, # log_level=log_level, # log_type=log_type, # log_server=log_server, # host_type=host_type, # params=k8s_param) else: logger.debug( "name={}, worker_api={}, capacity={},host_type={}".format( name, worker_api, capacity, host_type if host_type else 'docker')) if not name or not worker_api or not capacity: error_msg = "参数缺失" logger.warning(error_msg) return make_fail_resp(error=error_msg, data=args) url = urlparse(worker_api) if not url.scheme: worker_api = "tcp://" + worker_api # worker node listen on tcp port segs = worker_api.split(":") if len(segs) != 3: logger.error("Invalid daemon url = ", worker_api) return make_fail_resp(error='服务器地址格式错误', data={"worker_api": worker_api}) host = HostModel.objects(name=name) if host: error_msg = '主机名已存在' return make_fail_resp(error=error_msg, data={'name': name}) host = HostModel.objects(worker_api=worker_api) if host: error_msg = '服务器地址已存在' return make_fail_resp(error=error_msg, data={"worker_api": worker_api}) if not check_worker_api(worker_api): error_msg = '服务器地址异常' logger.error(error_msg) # return make_fail_resp(error=error_msg, data={'worker_api': worker_api}) return {'msg': error_msg, 'stat': 400} host_type = host_type if host_type else detect_daemon_type( worker_api) result = host_handler.create(name=name, worker_api=worker_api, capacity=int(capacity), host_type=host_type) logger.debug("result.msg={}".format(result.get('msg'))) if (host_type == "vsphere") and ('msg' in result): vsphere_errmsg = result.get('msg') error_msg = "Failed to create vsphere host {}".format( vsphere_errmsg) logger.warning(error_msg) return make_fail_resp(error=error_msg) elif result: logger.debug("host creation successfully") return make_ok_resp() else: error_msg = "Failed to create host {}".format(args["host_name"]) logger.warning(error_msg) return make_fail_resp(error=error_msg)
def host_api(): request_debug(r, logger) if r.method == 'GET': if "id" not in r.args and "id" not in r.form: logger.warn("host get without enough data") response_fail["error"] = "host GET without enough data" response_fail["data"] = r.form return jsonify(response_fail), CODE_BAD_REQUEST else: host_id = request_get(r, "id") result = host_handler.get_by_id(host_id) if result: return jsonify(result), CODE_OK else: logger.warn("host not found with id=" + host_id) response_fail["data"] = r.form return jsonify(response_fail), CODE_BAD_REQUEST elif r.method == 'POST': name, daemon_url, capacity, log_type, log_server, log_level = \ r.form['name'], r.form['daemon_url'], r.form['capacity'], \ r.form['log_type'], r.form['log_server'], r.form['log_level'] if "autofill" in r.form and r.form["autofill"] == "on": autofill = "true" else: autofill = "false" if "schedulable" in r.form and r.form["schedulable"] == "on": schedulable = "true" else: schedulable = "false" logger.debug("name={}, daemon_url={}, capacity={}" "fillup={}, schedulable={}, log={}/{}".format( name, daemon_url, capacity, autofill, schedulable, log_type, log_server)) if not name or not daemon_url or not capacity or not log_type: logger.warn("host post without enough data") response_fail["error"] = "host POST without enough data" response_fail["data"] = r.form return jsonify(response_fail), CODE_BAD_REQUEST else: result = host_handler.create(name=name, daemon_url=daemon_url, capacity=int(capacity), autofill=autofill, schedulable=schedulable, log_level=log_level, log_type=log_type, log_server=log_server) if result: logger.debug("host creation successfully") return jsonify(response_ok), CODE_CREATED else: logger.debug("host creation failed") response_fail["error"] = "Failed to create host {}".format( r.form["name"]) return jsonify(response_fail), CODE_BAD_REQUEST elif r.method == 'PUT': if "id" not in r.form: logger.warn("host put without enough data") response_fail["error"] = "host PUT without enough data" response_fail["data"] = r.form return jsonify(response_fail), CODE_BAD_REQUEST else: id, d = r.form["id"], {} for k in r.form: if k != "id": d[k] = r.form.get(k) result = host_handler.update(id, d) if result: logger.debug("host PUT successfully") return jsonify(response_ok), CODE_OK else: logger.debug("host PUT failed") response_fail["error"] = "Failed to update host {}".format( result.get("name")) return jsonify(response_fail), CODE_BAD_REQUEST elif r.method == 'DELETE': if "id" not in r.form or not r.form["id"]: logger.warn("host operation post without enough data") response_fail["error"] = "host delete without enough data" response_fail["data"] = r.form return jsonify(response_fail), CODE_BAD_REQUEST else: logger.debug("host delete with id={0}".format(r.form["id"])) if host_handler.delete(id=r.form["id"]): return jsonify(response_ok), CODE_OK else: response_fail["error"] = "Failed to delete host {}".format( r.form["id"]) return jsonify(response_fail), CODE_BAD_REQUEST else: response_fail["error"] = "unknown operation method" response_fail["data"] = r.form return jsonify(response_fail), CODE_BAD_REQUEST
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)