Esempio n. 1
0
def update_kubam_ip():
    if not request.json:
        return jsonify({'error': 'expected request with kubam_ip '}), 400
    if "kubam_ip" not in request.json:
        return jsonify({'error': 'expected request with kubam_ip '}), 400

    ip = request.json['kubam_ip']
    err, msg = YamlDB.update_kubam_ip(KUBAM_CFG, ip)
    if err != 0:
        return jsonify({'error': msg}), 400
    return jsonify({'kubam_ip': ip}), 201
Esempio n. 2
0
def update_proxy():
    if not request.json:
        return jsonify({'error': 'expected request with proxy '}), 400
    if "proxy" not in request.json:
        return jsonify({'error': 'expected request with proxy'}), 400

    proxy = request.json['proxy']
    err, msg = YamlDB.update_proxy(KUBAM_CFG, proxy)
    if err != 0:
        return jsonify({'error': msg}), 400
    return jsonify({'proxy': proxy}), 201
Esempio n. 3
0
def update_public_keys():
    if not request.json:
        return jsonify({'error': 'expected request with keys '}), 400
    if "keys" not in request.json:
        return jsonify({'error': 'expected request with keys '}), 400

    keys = request.json['keys']
    err, msg = YamlDB.update_public_keys(KUBAM_CFG, keys)
    if err != 0:
        return jsonify({'error': msg}), 400
    return jsonify({'keys' : keys}), 201
Esempio n. 4
0
def create_creds():
    if not request.json:
        return jsonify({'error': 'expected credentials hash'}), 400
     
    credentials = {} 
    credentials['user'] = request.json['credentials']['user']
    credentials['password'] = request.json['credentials']['password']
    credentials['ip'] = request.json['credentials']['server']
    if credentials['ip'] == "":
        return jsonify({'error': "Please enter a valid UCSM IP address."}), 401
    #app.logger.info("starting login attempt to UCS.")
    h, err = UCSSession.login(credentials['user'], 
                              credentials['password'],
                              credentials['ip'])
    if h == "":
        return jsonify({'error': err}), 401
    # write datafile. 
    YamlDB.update_ucs_creds(KUBAM_CFG, credentials)
    UCSSession.logout(h)
    return jsonify({'login': "******"}), 201
Esempio n. 5
0
File: app.py Progetto: dsoper2/KUBaM
def update_ucs_org():
    if not request.json:
        return jsonify({'error': 'expected request with org'}), 400
    if "org" not in request.json:
        return jsonify({'error': 'expected request with org'}), 400

    org = request.json['org']
    err, msg = YamlDB.update_org(KUBAM_CFG, org)
    if err != 0:
        return jsonify({'error': msg}), 400
    return jsonify({'org' : org}), 201
Esempio 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
Esempio n. 7
0
def get_networks():
    err, msg, handle = login()
    if err != 0:
        return not_logged_in(msg)
    vlans = UCSNet.listVLANs(handle)
    logout(handle)
    err, msg, net_hash = YamlDB.get_network(KUBAM_CFG)
    err, msg, net_settings = YamlDB.get_ucs_network(KUBAM_CFG)
    selected_vlan = ""
    if "vlan" in net_settings:
        selected_vlan = net_settings["vlan"]

    return jsonify({
        'vlans': [{
            "name": vlan.name,
            "id": vlan.id,
            "selected": (vlan.name == selected_vlan)
        } for vlan in vlans],
        'network':
        net_hash
    }), 200
Esempio n. 8
0
def mkboot_iso():
    # Get the ISO map
    db = YamlDB()
    err, msg, iso_images = db.get_iso_map(Const.KUBAM_CFG)
    if err != 0:
        return jsonify({"error": msg}), 400
    if len(iso_images) == 0:
        return jsonify({
            "error":
            "No ISOS have been mapped.  Please map an ISO image with an OS"
        }), 400
    iso_maker = IsoMaker()
    err, msg = iso_maker.mkboot_iso(isos)
    if err != 0:
        return jsonify({"error": msg}), 400

    builder = Builder()
    err, msg = builder.deploy_server_images(Const.KUBAM_CFG)
    if err != 0:
        return jsonify({"error": msg}), 400
    return jsonify({"status": "ok"}), 201
Esempio n. 9
0
def login():
    err, msg, config = YamlDB.open_config(KUBAM_CFG)
    if err == 0:
        if "ucsm" in config and "credentials" in config["ucsm"]:
            creds = config["ucsm"]["credentials"]
            if "user" in creds and "password" in creds and "ip" in creds:
                h, msg = UCSSession.login(creds["user"], creds["password"], creds["ip"])
                if h != "":
                    return 0, "", h
                return 1, msg, ""
                    
    return 1, "error logging in: %s" % msg, ""
Esempio n. 10
0
def update_iso_map():
    app.logger.info("request.json")
    app.logger.info(request.json)
    if not request.json:
        return jsonify({'error': 'expected request with iso_map '}), 400
    if "iso_map" not in request.json:
        return jsonify({'error': 'expected request with iso_map '}), 400

    isos = request.json['iso_map']
    err, msg = YamlDB.update_iso_map(KUBAM_CFG, isos)
    if err != 0:
        return jsonify({'error': msg}), 400
    return get_iso_map()
Esempio n. 11
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
Esempio n. 12
0
 def test_update_iso_map(self):
     err, msg = YamlDB.update_iso_map("/tmp/bfoo.yaml", [{
         "os":
         "centos7.3",
         "file":
         "/Users/vallard/Downloads/kubam/CentOS-7-x86_64-Minimal-1611.iso"
     }, {
         "os":
         "esxi6.0",
         "file":
         "/Users/vallard/Downloads/kubam/Vmware-ESXi-6.0.0-5050593-Custom-Cisco-6.0.3.2.iso"
     }])
     assert (err == 0)
Esempio n. 13
0
File: app.py Progetto: dsoper2/KUBaM
def update_settings():
    app.logger.info(request.json)
    if not request.json:
        return jsonify({'error': 'expected kubam_ip and keys in json request'}), 400
    if not "kubam_ip" in request.json:
        return jsonify({'error': 'Please enter the IP address of the kubam server'}), 400
    if not "keys" in request.json:
        return jsonify({'error': 'Please specify keys.  See documentation for how this should look: https://ciscoucs.github.io/kubam/docs/settings.'}), 400
    # proxy and org are not manditory.
    

    if "proxy" in request.json:
        proxy = request.json['proxy']
        err, msg = YamlDB.update_proxy(KUBAM_CFG, proxy)
        if err != 0:
            return jsonify({'error': msg}), 400

    if "org" in request.json:
        org = request.json['org']
        err, msg = YamlDB.update_org(KUBAM_CFG, org)
        if err != 0:
            return jsonify({'error': msg}), 400

    # update the kubam_IP if it is changed.     
    ip = request.json['kubam_ip']
    err, msg = YamlDB.update_kubam_ip(KUBAM_CFG, ip)
    if err != 0:
        return jsonify({'error': msg}), 400

    # update the keys if changed. 
    keys = request.json['keys']
    app.logger.info(keys)
    err, msg = YamlDB.update_public_keys(KUBAM_CFG, keys)
    if err != 0:
        return jsonify({'error': msg}), 400


    return jsonify({"status": "ok"}), 201
Esempio n. 14
0
def select_vlan():
    if not request.json:
        return jsonify({'error': 'expected hash of VLANs'}), 400
    err, msg, handle = login()
    if err != 0:
        return not_logged_in(msg)
    #app.logger.info("Request is: ")
    #app.logger.info(request)
    vlan = request.json['vlan']
    err, msg = YamlDB.update_ucs_network(KUBAM_CFG, {"vlan": vlan})
    if err != 0:
        return jsonify({'error': msg}), 500
    # return the existing networks now with the new one chosen.
    return get_networks()
Esempio n. 15
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
Esempio n. 16
0
def mkboot_iso():
    # get the iso map
    err, msg, isos = YamlDB.get_iso_map(KUBAM_CFG)
    if err != 0:
        return jsonify({"error": msg}), 400
    if len(isos) == 0:
        return jsonify({"error": "No ISOS have been mapped.  Please map an ISO image with an OS"}), 400
    err, msg = IsoMaker.mkboot_iso(isos)
    if err != 0:
        return jsonify({"error": msg}), 400

    err, msg = Builder.deploy_server_images(KUBAM_CFG)
    if err != 0:
        return jsonify({"error": msg}), 400
    return jsonify({"status": "ok"}), 201
Esempio n. 17
0
    def create_servers(req):
        """
        Create a new UCS Domain
        Format of request should be JSON that looks like:
        {"name", "ucs01", "type" : "ucsm", "credentials":
            {"user": "******", "password": "******", "ip" : "172.28.225.163" }}
        """
        err, msg = YamlDB.check_valid_server_group(req)
        if err != 0:
            return {"error": msg}, Const.HTTP_BAD_REQUEST
        # Make sure we can log in first.
        if not 'type' in req:
            return {"error": "No server type sent as part of request"}, Const.HTTP_UNAUTHORIZED
        if req['type'] == "ucsm":
            try:
                UCSUtil.check_ucs_login(req)
            except KubamError as e:
                return {"error": str(e)}, Const.HTTP_UNAUTHORIZED
        elif req["type"] == "ucsc":
            try:
                UCSCUtil.check_ucsc_login(req)
            except KubamError as e: 
                return {"error":str(e)}, Const.HTTP_UNAUTHORIZED
        elif req["type"] == "imc":
            try: 
                IMCUtil.check_imc_login(req)
            except KubamError as e: 
                return {"error":str(e)}, Const.HTTP_UNAUTHORIZED
        else:
            return {"error": "type: {0} is not recognized".format(req["type"])}, Const.HTTP_UNAUTHORIZED

        db = YamlDB()
        err, msg = db.new_server_group(Const.KUBAM_CFG, req)
        if err == 1:
            return {"error": msg}, Const.HTTP_BAD_REQUEST
        return {"status": "new server group {0} created!".format(req['name'])}, Const.HTTP_CREATED
Esempio n. 18
0
def deploy_server_images(config):
    err = 0
    msg = "ok"
    err, msg, config = YamlDB.parse_config(config, True)
    if err > 0:
        return err, msg

    for host in config["hosts"]:
        err, msg, template = build_template(host, config)
        if err > 0:
            break
        err, msg = build_boot_image(host, template)
        if err == 1:
            break

    return err, msg
Esempio n. 19
0
File: app.py Progetto: dsoper2/KUBaM
def get_full_org(handle):
    full_org = ""
    err, msg, org = YamlDB.get_org(KUBAM_CFG)
    if err != 0: 
        return err, msg, org
    if org == "":
        org = "kubam" 

    if org == "root":
        full_org = "org-root"
    else:
        full_org = "org-root/org-"+org

    if org != "root":
        err, msg = UCSUtil.create_org(handle, org)
    return err, msg, full_org
Esempio n. 20
0
def destroy():
    app.logger.info("Deleting deployment")
    err, msg, handle = login()
    if err != 0:
        return not_logged_in(msg)
    err, msg, hosts = YamlDB.get_hosts(KUBAM_CFG)
    if err != 0:
        return jsonify({'error': msg}), 400
    if len(hosts) == 0:
        return jsonify({"status": "no servers deployed"}), 200
    err, msg = UCSServer.deleteKubeServers(handle, "org-root/org-kubam", hosts)
    if err != 0:
        return jsonify({'error': msg}), 400
    err, msg = UCSNet.deleteKubeNetworking(handle, "org-root/org-kubam")
    if err != 0:
        return jsonify({'error': msg}), 400
    return jsonify({"status": "ok"}), 201
Esempio n. 21
0
def login():
    err, msg, config = YamlDB.open_config(KUBAM_CFG)
    if err == 0:
        if "ucsm" in config and "credentials" in config["ucsm"]:
            creds = config["ucsm"]["credentials"]
            if "user" in creds and "password" in creds and "ip" in creds:
                h, msg = UCSSession.login(creds["user"], creds["password"],
                                          creds["ip"])
                if h != "":
                    return 0, "", h
                return 1, msg, ""
            else:
                msg = "kubam.yaml file does not include the user, password, and ip properties to login."
                err = 1
        else:
            msg = "UCS Credentials have not been entered.  Please login to UCS to continue."
            err = 1
    return err, msg, ""
Esempio n. 22
0
    def make_ucs():
        ucs_util = UCSUtil()
        try:
            handle = ucs_util.ucs_login()
        except KubamError as e:
            return 1, str(e)
        err, msg, full_org = ucs_util.get_full_org(handle)
        if err != 0:
            return err, msg

        db = YamlDB()
        err, msg, net_settings = db.get_ucs_network(Const.KUBAM_CFG)
        selected_vlan = ""
        if "vlan" in net_settings:
            selected_vlan = net_settings["vlan"]
        if selected_vlan == "":
            UCSUtil.ucs_logout(handle)
            return 1, "No VLAN selected in UCS configuration."

        ucs_net = UCSNet()
        err, msg = ucs_net.create_kube_networking(handle, full_org, selected_vlan)
        if err != 0:
            UCSUtil.ucs_logout(handle)
            return err, msg

        # Get the selected servers and hosts
        err, msg, hosts = db.get_hosts(Const.KUBAM_CFG)
        err, msg, servers = db.get_ucs_servers(Const.KUBAM_CFG)
        err, msg, kubam_ip = db.get_kubam_ip(Const.KUBAM_CFG)

        ucs_server = UCSServer()
        err, msg = ucs_server.create_server_resources(handle, full_org, hosts, servers, kubam_ip)
        if err != 0:
            UCSUtil.ucs_logout(handle)
            return err, msg

        UCSUtil.ucs_logout(handle)
        return err, msg
Esempio n. 23
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
Esempio n. 24
0
 def delete_templates(self, server_group, req):
     ucs_templates = self.get_templates(server_group)
     db = YamlDB()
     msg = db.delete_template(Const.KUBAM_CFG, req, server_group, ucs_templates)
     return {"status": msg}, Const.HTTP_NO_CONTENT
Esempio n. 25
0
 def update_templates(self, server_group, req):
     ucs_templates = self.get_templates(server_group)
     db = YamlDB()
     msg = db.assign_template(Const.KUBAM_CFG, req, server_group, ucs_templates)
     return {"status": msg}, Const.HTTP_CREATED
Esempio n. 26
0
def get_iso_map():
    db = YamlDB()
    err, msg, iso_images = db.get_iso_map(Const.KUBAM_CFG)
    if err != 0:
        return jsonify({'error': msg}), 400
    return jsonify({'iso_map': iso_images}), 200
Esempio n. 27
0
 def test_get_ucs_servers(self):
     err, msg, servers = YamlDB.get_ucs_servers("/tmp/bfoo.yaml")
     assert (err == 0)
     assert ("blades" in servers)
Esempio n. 28
0
 def test_get_ucs_vlan(self):
     err, msg, net = YamlDB.get_ucs_network("/tmp/bfoo.yaml")
     assert (err == 0)
     assert ("vlan" in net)
Esempio n. 29
0
 def test_add_ucs_servers(self):
     err, msg = YamlDB.update_ucs_servers("/tmp/bfoo.yaml", {
         "blades": ["1/1", "1/2"],
         "rack_servers": ["7", "8", "9"]
     })
     assert (err == 0)
Esempio n. 30
0
 def test_add_ucs_vlan(self):
     err, msg = YamlDB.update_ucs_network("/tmp/bfoo.yaml",
                                          {"vlan": "default"})
     assert (err == 0)