Ejemplo n.º 1
0
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)
Ejemplo n.º 2
0
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
Ejemplo n.º 3
0
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
Ejemplo n.º 4
0
    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
Ejemplo n.º 5
0
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
Ejemplo n.º 6
0
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
Ejemplo n.º 7
0
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
Ejemplo n.º 8
0
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
Ejemplo n.º 9
0
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