Beispiel #1
0
 def __init__(self, cluster_ip, user, password, vserver=None):
     self.server = NaServer(cluster_ip, 1, 100)
     self.server.set_server_type('FILER')
     self.server.set_transport_type('HTTP')
     self.server.set_port(80)
     self.server.set_style('LOGIN')
     self.server.set_admin_user(user, password)
     if vserver is not None:
         self.server.set_vserver(vserver)
    def __init__(self, hostname, user, passwd):
        self.api = NaServer(hostname, 1, 3)
        self.api.set_style('LOGIN')
        self.api.set_admin_user(user, passwd)
        self.api.set_transport_type('HTTPS')

        self.name = hostname
        out = self.invoke('system-get-version')
        self.version = out.child_get_string('version')

        # Used for caching performance object descriptions:
        self.perf_obj_info = {}
Beispiel #3
0
    def __create_server(self, testing_active):
        if testing_active:
            return None

        s = NaServer(
                self.host,
                self.ontap_major_version,
                self.ontap_minor_version)
        s.set_server_type(self.server_type)
        s.set_transport_type(self.transport_type)
        s.set_port(self.server_port)
        s.set_style(self.connect_style)
        s.set_admin_user(self.user, self.pwd)
    
        return s
def cluster_setup(cluster):
    print("> " + cluster["cluster-name"] + ": Creating Cluster ")

    for node in cluster["cluster-nodes"]:

        print("---> " + node["node-name"] + ": Working on node ")
        # Building Session - REST
        s = requests.Session()
        s.url = "https://{}".format(node["ip"])
        s.verify = False
        s.auth = (node["user"], node["password"])
        s.headers = {
            "Content-Type": "application/hal+json",
            "Accept": "application/hal+json"
        }

        # Building Session - ZAPI
        session = NaServer(node["ip"], 1, 140)
        session.set_server_type("Filer")
        session.set_admin_user(node["user"], node["password"])
        session.set_transport_type("HTTPS")

        # STEP: Create cluster
        if ("-01" in node["node-name"]):
            print("---> " + node["node-name"] + ": Creating cluster...")

            # create cluster API
            api = "/api/cluster"

            # creating body
            body = {
                "contact": cluster["contact"],
                "location": cluster["location"],
                "name": cluster["cluster-name"],
                "password": cluster["password"],
                "management_interface": {}
            }
            # add cluster mgmt
            for lif in cluster["net-interfaces"]:
                if (lif["role"] == "cluster-mgmt"):
                    body["management_interface"]["ip"] = {
                        "address": lif["address"],
                        "netmask": lif["netmask"]
                    }
                    for route in cluster["net-routes"]:
                        if (route["destination"] == "0.0.0.0/0"):
                            body["management_interface"]["ip"][
                                "gateway"] = route["gateway"]
                            break
                        else:
                            continue
                    break
                else:
                    continue
            # add ntp server
            #if (cluster.get("ntp-servers")):
            #        for ntp_server in cluster["ntp-servers"]:
            #                body["ntp_servers"].append(ntp_server["server-name"])
            # add licenses
            #for ontap_license in cluster["licenses"]:
            #       body["licenses"].append(cluster["licenses"][ontap_license])

            response = s.post(url=s.url + api, data=json.dumps(body))
            print("URL==" + s.url + api)  #debug
            print("BODY==" + json.dumps(body))  #debug
            if response:
                print(response.json())
            else:
                print("WE DIDNT GET RESPONSE")
                #sys.exit()
            status = handle_job(s, response)
            if (status == "success"):
                print("---> " + node["node-name"] + ": SUCCESS")
            else:
                print("---> " + node["node-name"] + ": " + status)
                sys.exit()

        # STEP: Reading cluster LIF IP for joining additional nodes later
        if ("-01" in node["node-name"]):
            print(
                "--- " + node["node-name"] +
                ": Reading cluster LIF IP for joining further nodes later...")
            api = NaElement("net-interface-modify")
            for lif in cluster["net-interfaces"]:
                if (lif["role"] == "cluster-mgmt"):
                    api.child_add_string("home-port", lif["home-port"])
                    api.child_add_string("interface-name", "cluster_mgmt")
                    api.child_add_string("vserver", cluster["cluster-name"])
                else:
                    continue
            xo = session.invoke_elem(api)
            if (xo.results_status() == "failed"):
                print("Error:\n")
                print(xo.sprintf())
                sys.exit(1)
            print("Received:\n")
            print(xo.sprintf())
            api1 = NaElement("net-interface-revert")
            api1.child_add_string("interface-name", "cluster_mgmt")
            api1.child_add_string("vserver", cluster["cluster-name"])
            xo1 = session.invoke_elem(api1)
            if (xo1.results_status() == "failed"):
                print("Error:\n")
                print(xo1.sprintf())
                sys.exit(1)
            print("Received:\n")
            print(xo1.sprintf())
            api = "/api/network/ip/interfaces"
            url_params = "?fields=services,ip.address&services=cluster_core&max_records=1"
            response = s.get(url=s.url + api + url_params)
            status = handle_job(s, response)
            if (status == "success"):
                clus_lif_ip = response.json()["records"][0]["ip"]["address"]
                print("---> " + node["node-name"] + ": SUCCESS")
            else:
                print("---> " + node["node-name"] + ": " + status)
                sys.exit(1)

        # STEP: Join nodes to cluster
        if (not "-01" in node["node-name"]):
            print("--- " + node["node-name"] + ": Joining node to cluster...")
            zapi_post = NaElement("cluster-join")
            zapi_post.child_add_string("cluster-ip-address", clus_lif_ip)
            zapi_post_return = session.invoke_elem(zapi_post)
            if (zapi_post_return.results_status() == "failed"):
                print("---> " + node["node-name"] + ": " +
                      zapi_post_return.sprintf().strip())
                sys.exit(1)
            else:
                zapi_get = NaElement("cluster-create-join-progress-get")
                is_complete = ""
                join_iterator = 1
                while is_complete != "true" and \
                                join_iterator < 13:
                    time.sleep(10)
                    zapi_get_return = session.invoke_elem(zapi_get)
                    is_complete = zapi_get_return.child_get(
                        "attributes").child_get(
                            "cluster-create-join-progress-info"
                        ).child_get_string("is-complete")
                    action_status = zapi_get_return.child_get(
                        "attributes").child_get(
                            "cluster-create-join-progress-info"
                        ).child_get_string("status")
                    join_iterator = join_iterator + 1
                if (is_complete == "true") and (action_status == "success"):
                    print("---> " + node["node-name"] + ": SUCCESS")
                else:
                    print("---> " + node["node-name"] + ": " +
                          zapi_get.sprintf().strip())
                    print("---> " + node["node-name"] + ": " +
                          zapi_get_return.sprintf().strip())
                    sys.exit(1)