def power_server(server_group, req_json, action): """ Power actions for a server: off, on, hardreset, softreset """ db = YamlDB() # get server group. servers = "" try: sg = db.get_server_group(Const.KUBAM_CFG, server_group) except KubamError as e: return jsonify({"error": str(e)}), Const.HTTP_BAD_REQUEST try: servers = req_json['servers'] except KubamError as e: return jsonify({"error": str(e)}), Const.HTTP_BAD_REQUEST # find out if server is ucsc or ucs err = 0 msg = "" powerstat = "" if sg['type'] == "ucsm": return power_server_ucsm(sg, servers, action) elif sg['type'] == "ucsc": return power_server_ucsc(sg, servers, action)
def deploy_servers(server_group): """ Given a server group, deploy the resources in this form: 1. If a service profile template is defined, create a sp from the template and associate 2. If no service profile is defined, create all resources (like we did before) """ #TODO: deploy only hosts that are given as parameters. db = YamlDB() try: sg = db.get_server_group(Const.KUBAM_CFG, server_group) except KubamError as e: return jsonify({"error": str(e)}), Const.HTTP_BAD_REQUEST org = "org-root" if "org" in sg: org = sg["org"] err, msg, hosts = db.get_hosts_in_server_group(Const.KUBAM_CFG, server_group) if err != 0: return jsonify({"error": msg}), Const.HTTP_BAD_REQUEST if len(hosts) < 1: return jsonify({"error": "No hosts defined in the server group"}), Const.HTTP_BAD_REQUEST if sg['type'] == 'ucsc': return deploy_ucsc(sg, hosts, org) elif sg['type'] == 'ucsm': return deploy_ucs(sg, hosts, org) return jsonify({"error": "server group type is not supported.".format(sg['type'])}), Const.HTTP_BAD_REQUEST
def get_server_status(server_group): """ Get the FSM or status of the server... what its doing now. Expects { servers: { blade: [ 1/1, 1/2, ...], rack_server: [ 1, 2, 3] }} (with quotes of course for proper json) if nothing is passed, returns everything. """ wanted = "all" try: db = YamlDB() sg = db.get_server_group(Const.KUBAM_CFG, server_group) except KubamError as e: return jsonify({"error": str(e)}), Const.HTTP_BAD_REQUEST if request.json and "servers" in request.json: wanted = request.json["servers"] if sg["type"] == "ucsm": return get_server_status_ucsm(sg, wanted) elif sg["type"] == "ucsc": return get_server_status_ucsc(sg, wanted) return jsonify({ "error": "server group {0} is not a supported type".format(sg["type"]) }), Const.HTTP_BAD_REQUEST
def get_templates(server_group): ucs_templates = [] db = YamlDB() sg = db.get_server_group(Const.KUBAM_CFG, server_group) if sg['type'] == "ucsc": handle = UCSCUtil.ucsc_login(sg) ucs_templates = UCSCTemplate.list_templates(handle) UCSCUtil.ucsc_logout(handle) elif sg['type'] == "ucsm": handle = UCSUtil.ucs_login(sg) ucs_templates = UCSTemplate.list_templates(handle) UCSUtil.ucs_logout(handle) return ucs_templates
def get_server_fsm(server_group): wanted = "all" try: db = YamlDB() sg = db.get_server_group(Const.KUBAM_CFG, server_group) except KubamError as e: return jsonify({"error": str(e)}), Const.HTTP_BAD_REQUEST if request.json and "servers" in request.json: wanted = request.json["servers"] if sg['type'] == 'ucsm': return ucs_fsm(sg, wanted) elif sg['type'] == 'ucsc': return ucsc_fsm(sg, wanted) return jsonify({ "error": "server group {0} is not a supported type".format(sg["type"]) }), Const.HTTP_BAD_REQUEST
def get_servers(server_group): """ List all the servers in the server group or in this case the domain. 1. Make call to UCS to grab the servers. 2. Make call to database to see which ones are selected. 3. Call servers_to_api which merges the two adding 'selected: true' to the servers that are selected. """ db = YamlDB() try: sg = db.get_server_group(Const.KUBAM_CFG, server_group) except KubamError as e: return jsonify({"error": str(e)}), Const.HTTP_BAD_REQUEST if sg['type'] == "ucsm": try: handle = UCSUtil.ucs_login(sg) except KubamError as e: return jsonify({"error": str(e)}), Const.HTTP_UNAUTHORIZED ucs_servers = UCSServer.list_servers(handle) UCSUtil.ucs_logout(handle) elif sg['type'] == 'ucsc': try: handle = UCSCUtil.ucsc_login(sg) except KubamError as e: return jsonify({"error": str(e)}), Const.HTTP_UNAUTHORIZED ucs_servers = UCSCServer.list_servers(handle) UCSCUtil.ucsc_logout(handle) # Gets a hash of severs of form: # {blades: ["1/1", "1/2",..], rack: ["6", "7"]} err, msg, db_servers = db.get_ucs_servers(Const.KUBAM_CFG, server_group) if err != 0: return jsonify({"error": msg}), Const.HTTP_BAD_REQUEST if db_servers is None: return jsonify({"servers": ucs_servers}) ucs_servers = UCSUtil.servers_to_api(ucs_servers, db_servers) if err != 0: return jsonify({"error": msg}), Const.HTTP_BAD_REQUEST return jsonify({"servers": ucs_servers}), Const.HTTP_OK
def disk_operation(server_group): """ Figure out the operation and do it. """ wanted = "all" try: db = YamlDB() sg = db.get_server_group(Const.KUBAM_CFG, server_group) except KubamError as e: return jsonify({"error": str(e)}), Const.HTTP_BAD_REQUEST if request.json and "servers" in request.json: wanted = request.json["servers"] ## login to UCS Manager and do the action. if sg["type"] == "ucsm": try: handle = UCSUtil.ucs_login(sg) except KubamError as e: return jsonify({"error": str(e)}), Const.HTTP_UNAUTHORIZED if request.method == "DELETE": js, rc = Disks.delete_ucsm(handle, wanted) js, rc = Disks.list_ucsm(handle, wanted) return jsonify(js), rc ## login to UCS Central and do the action elif sg["type"] == "ucsc": try: handle = UCSCUtil.ucsc_login(sg) except KubamError as e: return jsonify({"error": str(e)}), Const.HTTP_UNAUTHORIZED if request.method == "DELETE": js, rc = Disks.delete_ucsc(handle, wanted) js, rc = Disks.list_ucsc(handle, wanted) return jsonify(js), rc
def powerstat(server_group): """ Get the power stat for the servers. """ powerstat = "" wanted_servers = "all" db = YamlDB() try: sg = db.get_server_group(Const.KUBAM_CFG, server_group) except KubamError as e: return jsonify({"error": str(e)}), Const.HTTP_BAD_REQUEST if request.json and "servers" in request.json: wanted_servers = request.json["servers"] current_app.logger.info(wanted_servers) if sg['type'] == "ucsm": powerstat = powerstat_ucsm(sg, wanted_servers) elif sg['type'] == "ucsc": powerstat = powerstat_ucsc(sg, wanted_servers) else: return jsonify({"error": "powerstat not supported on this type of server"}), Const.HTTP_BAD_REQUEST return jsonify({"status" : powerstat }), Const.HTTP_OK
def create_vmedia(server_group): """ Create the Vmedia policy for a server group """ db = YamlDB() # get server group. try: sg = db.get_server_group(Const.KUBAM_CFG, server_group) except KubamError as e: return jsonify({"error": str(e)}), Const.HTTP_BAD_REQUEST org = "org-root" if "org" in sg: org = sg["org"] # go through all hosts associated with this server group err, msg, hosts = db.list_hosts(Const.KUBAM_CFG) if err == 1: return jsonify({'error': msg}), Const.HTTP_BAD_REQUEST hosts = [x for x in hosts if 'server_group' in x and x['server_group'] == server_group] if len(hosts) < 1: return jsonify({'error': 'no hosts associated with server group'}), Const.HTTP_OK # get the os image they use oses = list(set([ x["os"] for x in hosts])) # create those vmedia policies err = 0 msg = "" err, msg, kubam_ip = db.get_kubam_ip(Const.KUBAM_CFG) if kubam_ip is None: return jsonify({'error': 'Please define the KUBAM IP first.'} ), Const.HTTP_OK handle = "" if sg['type'] == 'ucsm': try: handle = UCSUtil.ucs_login(sg) except KubamError as e: return jsonify({"error": str(e)}), Const.HTTP_BAD_REQUEST err, msg = UCSServer.make_vmedias(handle, org, kubam_ip, oses) UCSUtil.ucs_logout(handle) elif sg['type'] == 'ucsc': try: handle = UCSCUtil.ucsc_login(sg) except KubamError as e: return jsonify({"error": str(e)}), Const.HTTP_BAD_REQUEST err, msg = UCSCServer.make_vmedias(handle, org, kubam_ip, oses) UCSCUtil.ucsc_logout(handle) elif sg['type'] == 'imc': try: handle = IMCUtil.imc_login(sg) except KubamError as e: return jsonify({"error": str(e)}), Const.HTTP_BAD_REQUEST try: IMCServer.mount_media(handle, kubam_ip, hosts[0]['name'], oses[0]) except KubamError as e: IMCUtil.imc_logout(handle) return jsonify({"error": str(e)}), Const.HTTP_BAD_REQUEST IMCUtil.imc_logout(handle) if err != 0: return jsonify({'error': msg}), Const.HTTP_BAD_REQUEST return jsonify({"status": oses}), Const.HTTP_CREATED