def main(): s = NaServer(filer, 1, 3) response = s.set_style('LOGIN') if (response and response.results_errno() != 0): r = response.results_reason() print("Unable to set authentication style " + r + "\n") sys.exit(2) s.set_admin_user(user, pw) response = s.set_transport_type('HTTP') if (response and response.results_errno() != 0): r = response.results_reason() print("Unable to set HTTP transport " + r + "\n") sys.exit(2) if (command == "scheduleList"): schedule_list(s) elif (command == "relationshipStatus"): relationship_status(s) else: print("Invalid operation \n") print_usage()
def main(): s = NaServer(filer, 1, 3) response = s.set_style('LOGIN') if (response and response.results_errno() != 0): r = response.results_reason() print("Unable to set authentication style " + r + "\n") sys.exit(2) s.set_admin_user(user, pw) response = s.set_transport_type('HTTP') if (response and response.results_errno() != 0): r = response.results_reason() print("Unable to set HTTP transport" + r + "\n") sys.exit(2) if (command == "lun"): process_LUN(s) elif (command == "igroup"): process_igroup(s) elif (command == "fcp"): process_fcp(s) elif (command == "iscsi"): process_iscsi(s) else: print("Invalid operation\n") print_usage()
def main(): s = NaServer(filer, 1, 3) resp = s.set_style('LOGIN') if (resp and resp.results_errno() != 0): r = resp.results_reason() print("Failed to set authentication style " + r + "\n") sys.exit(2) s.set_admin_user(user, pw) resp = s.set_transport_type('HTTP') if (resp and resp.results_errno() != 0): r = resp.results_reason() print("Unable to set HTTP transport " + r + "\n") sys.exit(2) if ((command == "raw-capacity") or (command == "formatted-capacity") or (command == "spare-capacity")): calc_raw_fmt_spare_capacity(s) elif ((command == "raid-overhead") or (command == "wafl-overhead")): calc_raid_wafl_overhead(s) elif (command == "allocated-capacity"): calc_allocated_capacity(s) elif (command == "avail-user-data-capacity"): calc_avail_user_data_capacity(s) elif (command == "provisioning-capacity"): calc_provisioning_capacity(s) else: print("Invalid operation\n")
def aggr_rename(module): cluster = module.params['cluster'] user_name = module.params['user_name'] password = module.params['password'] aggr = module.params['aggr'] new_aggr_name = module.params['new_aggr_name'] results = {} results['changed'] = False s = NaServer(cluster, 1 , 0) s.set_server_type("FILER") s.set_transport_type("HTTPS") s.set_port(443) s.set_style("LOGIN") s.set_admin_user(user_name, password) api = NaElement("aggr-rename") api.child_add_string("aggregate",aggr) api.child_add_string("new-aggregate-name",new_aggr_name) xo = s.invoke_elem(api) if(xo.results_errno() != 0): r = xo.results_reason() module.fail_json(msg=r) results['changed'] = False else: results['changed'] = True return results
def main(): s = NaServer(filer, 1, 3) resp = s.set_transport_type('HTTP') if (resp and resp.results_errno() != 0): r = resp.results_reason() print("Unable to set HTTP transport " + r + "\n") sys.exit(2) resp = s.set_style('LOGIN') if (resp and resp.results_errno() != 0): r = resp.results_reason() print("Failed to set authentication style " + r + "\n") sys.exit(2) s.set_admin_user(user, pw) if (command == "file-get-snaplock-retention-time"): file_get_retention(s) elif (command == "file-set-snaplock-retention-time"): file_set_retention(s) elif (command == "file-snaplock-retention-time-list-info"): file_get_retention_list(s) elif (command == "file-get-snaplock-retention-time-list-info-max"): file_get_retention_list_info_max(s) else: print("Invalid operation\n") print_usage()
def snmp_community_add(module): cluster = module.params['cluster'] user_name = module.params['user_name'] password = module.params['password'] vserver = module.params['vserver'] access_control = module.params['access_control'] community = module.params['community'] results = {} results['changed'] = False s = NaServer(cluster, 1 , 15) s.set_server_type("FILER") s.set_transport_type("HTTPS") s.set_port(443) s.set_style("LOGIN") s.set_admin_user(user_name, password) s.set_vserver(vserver) api = NaElement("snmp-community-add") api.child_add_string("access-control", access_control) api.child_add_string("community", community) xo = s.invoke_elem(api) if(xo.results_errno() != 0): r = xo.results_reason() module.fail_json(msg=r) results['changed'] = False else: results['changed'] = True return results
def vol_size(module): cluster = module.params['cluster'] user_name = module.params['user_name'] password = module.params['password'] vserver = module.params['vserver'] volume = module.params['volume'] size = module.params['size'] results = {} results['changed'] = False s = NaServer(cluster, 1, 15) s.set_server_type("FILER") s.set_transport_type("HTTPS") s.set_port(443) s.set_style("LOGIN") s.set_admin_user(user_name, password) s.set_vserver(vserver) api = NaElement("volume-size") api.child_add_string("volume", volume) api.child_add_string("new-size", size) xo = s.invoke_elem(api) if (xo.results_errno() != 0): r = xo.results_reason() module.fail_json(msg=r) results['changed'] = False else: results['changed'] = True return results
def __init__(self, configname): zfscredfilename = os.path.join(scriptpath(), 'netappcredentials.cfg') if not os.path.isfile(zfscredfilename): raise Exception( self._exceptionbase, "Configuration file %s not found" % zfscredfilename) # Authentication information zfscredconfig = SafeConfigParser() zfscredconfig.read(zfscredfilename) zfsauth = (zfscredconfig.get('netappcredentials', 'user'), zfscredconfig.get('netappcredentials', 'password')) # self._filer = Configuration.get('filer', 'netapp') self._srv = NaServer(self._filer, 1, 1) # Check if CA certificate validation is needed try: self._cacert = os.path.join(scriptpath(), 'certs', Configuration.get('cacert', 'netapp')) except NoOptionError: self._cacert = None if self._cacert: self._srv.set_ca_certs(self._cacert) self._srv.set_server_cert_verification(True) self._srv.set_hostname_verification(False) # self._srv.set_admin_user( zfscredconfig.get('netappcredentials', 'user'), zfscredconfig.get('netappcredentials', 'password')) self._volprefix = Configuration.get('volumeprefix', 'netapp') self._volname = "%s%s" % (self._volprefix, configname) super(Netapp, self).__init__(configname)
def connect_svm(in_args): # type and syntax checking on command line args obj_regexp = re.compile( r'^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$|^[a-zA-Z0-9][a-zA-Z0-9-]{1,61}[a-zA-Z0-9](\.[a-zA-Z0-9\-]{2,}){0,6}$' ) if (not (obj_regexp.match(in_args.svm))): sys.exit( "error: the svm parameter must be either an IP address or a hostname" ) # connect to svm obj_svm = NaServer(in_args.svm, 1, 3) obj_svm.set_transport_type('HTTPS') if (in_args.cert is None): obj_svm.set_style('LOGIN') string_username = raw_input("login as: ") string_password = getpass.getpass() obj_svm.set_admin_user(string_username, string_password) else: result = obj_svm.set_style('CERTIFICATE') obj_svm.set_server_cert_verification(0) obj_svm.set_client_cert_and_key(in_args.cert[0], in_args.cert[1]) # check that the api is reachable result = obj_svm.invoke("system-get-version") if (result.results_status() == "failed"): sys.exit("error: cannot connect to filer; " + result.results_reason()) return obj_svm
def main(): s = NaServer(filer, 1, 3) out = s.set_transport_type('HTTP') if (out and out.results_errno() != 0): r = out.results_reason() print("Connection to filer failed: " + r + "\n") sys.exit(2) out = s.set_style('LOGIN') if (out and out.results_errno() != 0): r = out.results_reason() print("Connection to filer failed: " + r + "\n") sys.exit(2) out = s.set_admin_user(user, pw) if (command == "object-list"): get_object_list(s) elif (command == "instance-list"): get_instance_list(s) elif (command == "counter-list"): get_counter_list(s) elif (command == "get-counter-values"): get_counter_values(s) else: print("Invalid operation\n") print_usage()
def main(): s = NaServer(filer, 1, 3) response = s.set_style('LOGIN') if (response and response.results_errno() != 0): r = response.results_reason() print("Unable to set authentication style " + r + "\n") sys.exit(2) s.set_admin_user(user, pw) response = s.set_transport_type('HTTP') if (response and response.results_errno() != 0): r = response.results_reason() print("Unable to set HTTP transport" + r + "\n") sys.exit(2) if (command == "get"): snmp_get(s) elif (command == "status"): snmp_status(s) elif (command == "addCommunity"): add_community(s) elif (command == "deleteCommunity"): delete_community(s) else: print("Invalid operation\n") print_usage()
def main(): s = NaServer(filer, 1, 3) response = s.set_style('LOGIN') if (response and response.results_errno() != 0): r = response.results_reason() print("Unable to set authentication style " + r + "\n") sys.exit(2) s.set_admin_user(user, pw) response = s.set_transport_type('HTTP') if (response and response.results_errno() != 0): r = response.results_reason() print("Unable to set HTTP transport" + r + "\n") sys.exit(2) if (command == "getStatus"): get_status(s) elif (command == "getVolStatus"): get_vol_status(s) elif (command == "off"): snapmirror_off(s) elif (command == "on"): snapmirror_on(s) else: print("Invalid operation\n") print_usage()
def main(): s = NaServer(filer, 1, 3) response = s.set_style('LOGIN') if(response and response.results_errno() != 0 ): r = response.results_reason() print ("Unable to set authentication style " + r + "\n") sys.exit (2) s.set_admin_user(user, pw) response = s.set_transport_type('HTTP') if(response and response.results_errno() != 0 ): r = response.results_reason() print ("Unable to set HTTP transport " + r + "\n") sys.exit (2) if(option == "get"): get_option_info(s) elif(option == "set"): set_option_info(s) elif(option == "optionsList"): options_list_info(s) else: print("Invalid Option \n") print_usage()
def construct_server(hostname, username, password): server = NaServer(hostname, 1, 0 ) server.set_style('LOGIN') server.set_transport_type('HTTP') server.set_server_type('DFM') server.set_port(8088) server.set_admin_user(username, password) return server
def create_conn(self, host): conn = NaServer(host, 1, 21) conn.set_server_type("FILER") conn.set_transport_type("HTTP") conn.set_port(80) conn.set_style("LOGIN") conn.set_admin_user("root", "root1234") return conn
def connect(hostname, user, password, minor_version=1, major_version=21): global conn conn = NaServer(hostname, minor_version, major_version) conn.set_server_type('filer') conn.set_transport_type('HTTPS') conn.set_port(443) conn.set_style('LOGIN') conn.set_admin_user(user, password) return conn
def date_time(module): cluster = module.params['cluster'] user_name = module.params['user_name'] password = module.params['password'] val_certs = module.params['val_certs'] timezone = module.params['timezone'] date = module.params['date'] connection = NaServer(cluster, 1, 0) connection.set_server_type("FILER") connection.set_transport_type("HTTPS") connection.set_port(443) connection.set_style("LOGIN") connection.set_admin_user(user_name, password) if not val_certs: try: _create_unverified_https_context = ssl._create_unverified_context except AttributeError: # Legacy Python that doesn't verify HTTPS certificates by default pass else: # Handle target environment that doesn't support HTTPS verification ssl._create_default_https_context = _create_unverified_https_context results = {} results['changed'] = False args = NaElement("args") args.child_add(NaElement("arg", "cluster")) args.child_add(NaElement("arg", "date")) args.child_add(NaElement("arg", "modify")) if module.params['timezone']: args.child_add(NaElement("arg", "-timezone")) args.child_add(NaElement("arg", timezone)) if module.params['date']: args.child_add(NaElement("arg", "-date")) args.child_add(NaElement("arg", date)) systemCli = NaElement("system-cli") systemCli.child_add(args) xo = connection.invoke_elem(systemCli) if (xo.results_errno() != 0): r = xo.results_reason() module.fail_json(msg=r) results['changed'] = False else: results['changed'] = True return results
def int_create(module): cluster = module.params['cluster'] user_name = module.params['user_name'] password = module.params['password'] node = module.params['node'] vserver = module.params['vserver'] lif = module.params['lif'] role = module.params['role'] data_proto = module.params['data_proto'] port = module.params['port'] ip = module.params['ip'] netmask = module.params['netmask'] subnet = module.params['subnet'] results = {} results['changed'] = False s = NaServer(cluster, 1, 0) s.set_server_type("FILER") s.set_transport_type("HTTPS") s.set_port(443) s.set_style("LOGIN") s.set_admin_user(user_name, password) api = NaElement('net-interface-create') api.child_add_string('address', ip) xi = NaElement('data-protocols') api.child_add(xi) for proto in data_proto: xi.child_add_string('data-protocol', proto) api.child_add_string('home-node', node) api.child_add_string('home-port', port) api.child_add_string('interface-name', lif) api.child_add_string('netmask', netmask) api.child_add_string('role', role) api.child_add_string('vserver', vserver) if module.params['subnet']: api.child_add_string('subnet-name', subnet) xo = s.invoke_elem(api) if (xo.results_errno() != 0): r = xo.results_reason() module.fail_json(msg=r) results['changed'] = False else: results['changed'] = True return results
def storage_pool_create(module): cluster = module.params['cluster'] user_name = module.params['user_name'] password = module.params['password'] val_certs = module.params['val_certs'] disk_list = module.params['disk_list'] storage_pool = module.params['storage_pool'] simulate = module.params['simulate'] results = {} results['changed'] = False if not val_certs: try: _create_unverified_https_context = ssl._create_unverified_context except AttributeError: # Legacy Python that doesn't verify HTTPS certificates by default pass else: # Handle target environment that doesn't support HTTPS verification ssl._create_default_https_context = _create_unverified_https_context s = NaServer(cluster, 1, 0) s.set_server_type("FILER") s.set_transport_type("HTTPS") s.set_port(443) s.set_style("LOGIN") s.set_admin_user(user_name, password) api = NaElement("storage-pool-create") api.child_add_string("storage-pool", storage_pool) if module.params['simulate']: api.child_add_string("simulate", simulate) xi = NaElement("disk-list") api.child_add(xi) for disk in disk_list: xi.child_add_string("disk-name", disk) xo = s.invoke_elem(api) if (xo.results_errno() != 0): r = xo.results_reason() module.fail_json(msg=r) results['changed'] = False else: results['changed'] = True return results
def cdotconnect(filer, username, password): """ return a filer connection handle """ s = NaServer(filer, 1, 31) s.set_server_type("FILER") s.set_transport_type( "HTTP" ) # would like to use HTTPS but I get ssl cert errors on Ubuntu 15.x s.set_port(80) s.set_style("LOGIN") s.set_admin_user(username, password) return s
def __init__(self, hostname, user, passwd): self.api = NaServer(hostname, 1, 3) response = self.api.set_style('LOGIN') if (response and response.results_errno() != 0): r = response.results_reason() print("Unable to set authentication style " + r + "\n") sys.exit(2) self.api.set_admin_user(user, passwd) self.api.set_transport_type('HTTPS') self.name = hostname
def get_volume_info(): args = len(sys.argv) - 1 if(args < 3): print_usage() filer = sys.argv[1] user = sys.argv[2] pw = sys.argv[3] if(args == 4): volume = sys.argv[4] s = NaServer(filer, 1, 3) response = s.set_style('LOGIN') if(response and response.results_errno() != 0 ): r = response.results_reason() print ("Unable to set authentication style " + r + "\n") sys.exit (2) s.set_admin_user(user, pw) response = s.set_transport_type('HTTP') if(response and response.results_errno() != 0 ): r = response.results_reason() print ("Unable to set HTTP transport " + r + "\n") sys.exit (2) if(args == 3): out = s.invoke("volume-list-info") else: out = s.invoke("volume-list-info", "volume", volume) if(out.results_status() == "failed"): print (out.results_reason() + "\n") sys.exit (2) volume_info = out.child_get("volumes") result = volume_info.children_get() for vol in result: vol_name = vol.child_get_string("name") print ("Volume name :" + vol_name + "\n") size_total = vol.child_get_int("size-total") print ("Total size: " + str(size_total) + " bytes \n") size_used = vol.child_get_int("size-used") print ("Used Size : " + str(size_used) + " bytes\n") print ("-------------------------------------------\n")
def __init__(self, logger=None, debug_level=None, log_console=False, log_file=False): """Initializes settings, logging, and creates connections to vservers. Arguments: debug_level (string): Level of debugging information to log. logger (instance): A previously instantiated HMDCLogger instance. log_console (boolean): Enable/disable logging to the console. log_file (string): Full path to log file; False if disabled. Attributes: config_name (string): Class name for referencing. hmdclog (instance): Instance of HMDCLogger for logging. options (dictionary): Settings imported from conf file. vservers (dictionary): Instances of NaServer (NetApp). """ config_name = self.__class__.__name__ self.vservers = {} # Import conf file settings. conf = ConfigParser.ConfigParser() conf.read(self.CONFIG_FILE) self.options = { 'debug_level': conf.get(config_name, 'debug_level'), 'cdot_password': conf.get(config_name, 'cdot_password'), 'cdot_username': conf.get(config_name, 'cdot_username'), } # Configure HMDC logging instance. if logger is None: if debug_level is None: debug_level = self.options['debug_level'] self.hmdclog = hmdclogger.HMDCLogger(config_name, debug_level) if log_console: self.hmdclog.log_to_console() if log_file: self.hmdclog.log_to_file(log_file) else: self.hmdclog = logger # Instantiate and authenticate NetApp connections. for vserver in self.VOLUMES.iterkeys(): # API major release 1, minor 20. self.vservers[vserver] = NaServer(vserver, 1, 20) # Authenticate to the NetApp. self._netapp_auth(vserver)
def aggr_add(module): cluster = module.params['cluster'] user_name = module.params['user_name'] password = module.params['password'] val_certs = module.params['val_certs'] disk_type = module.params['disk_type'] aggr = module.params['aggr'] disk_count = module.params['disk_count'] disk_size = module.params['disk_size'] results = {} results['changed'] = False if not val_certs: try: _create_unverified_https_context = ssl._create_unverified_context except AttributeError: # Legacy Python that doesn't verify HTTPS certificates by default pass else: # Handle target environment that doesn't support HTTPS verification ssl._create_default_https_context = _create_unverified_https_context s = NaServer(cluster, 1 , 0) s.set_server_type("FILER") s.set_transport_type("HTTPS") s.set_port(443) s.set_style("LOGIN") s.set_admin_user(user_name, password) api = NaElement("aggr-add") api.child_add_string("disk-type", disk_type) api.child_add_string("aggregate", aggr) api.child_add_string("disk-count", disk_count) api.child_add_string("disk-size-with-unit", disk_size) xo = s.invoke_elem(api) if(xo.results_errno() != 0): r = xo.results_reason() module.fail_json(msg=r) results['changed'] = False else: results['changed'] = True return results
def trigger_autosupport(): s = NaServer(cluster, 1, 110) s.set_server_type("FILER") s.set_transport_type("HTTPS") s.set_port(443) s.set_style("LOGIN") s.set_admin_user(username, password) api = NaElement("autosupport-invoke") api.child_add_string("message", "Possible NFSv4 lock bug discovered") api.child_add_string("node-name", "*") api.child_add_string("type", "all") s.invoke_elem(api)
def _netapp_login(self): """ Login to our netapp filer """ sys.path.append(self.config['netappsdkpath']) try: import NaServer except ImportError: self.log.error("Unable to load netapp SDK from %s" % self.config['netappsdkpath']) self.server = NaServer.NaServer(self.ip, 1, 3) self.server.set_transport_type('HTTPS') self.server.set_style('LOGIN') self.server.set_admin_user(self.netapp_user, self.netapp_password)
def migrate_lifs(cluster, username, password, dest_node, dest_port, vserver, lif): s = NaServer(cluster, 1, 110) s.set_server_type("FILER") s.set_transport_type("HTTPS") s.set_port(443) s.set_style("LOGIN") s.set_admin_user(username, password) api = NaElement("net-interface-migrate") api.child_add_string("destination-node", dest_node) api.child_add_string("destination-port", dest_port) api.child_add_string("lif", lif) api.child_add_string("vserver", vserver) s.invoke_elem(api)
def connect_to_api(module): cluster = module.params['cluster'] user_name = module.params['user_name'] password = module.params['password'] val_certs = module.params['val_certs'] if not val_certs: invoke_elem_no_verify() connection = NaServer(cluster, 1 , 0) connection.set_server_type("FILER") connection.set_transport_type("HTTPS") connection.set_port(443) connection.set_style("LOGIN") connection.set_admin_user(user_name, password)
def prepare(self, arglist): self.host = self.getHost("RESOURCE_HOST_0") self.iscsiHost = self.getHost("RESOURCE_HOST_1") self.scsiid = string.split( self.host.lookup("OPTION_CARBON_DISKS", None), "scsi-")[1] ip = self.host.lookup(["UCSISCSI", "TARGET_ADDRESS"], None) username = self.host.lookup(["UCSISCSI", "TARGET_USERNAME"], None) password = self.host.lookup(["UCSISCSI", "TARGET_PASSWORD"], None) self._server = NaServer.NaServer(ip, 1, 0) self._server.set_admin_user(username, password) xenrt.TEC().logverbose("Number of active paths to boot LUN = %d" % self.countActivePaths()) if self.countActivePaths() != 2: raise xenrt.XRTError("Host does not have 2 paths to boot LUN")
def aggr_create(module): cluster = module.params['cluster'] user_name = module.params['user_name'] password = module.params['password'] node = module.params['node'] disk_type = module.params['disk_type'] aggr = module.params['aggr'] disk_count = module.params['disk_count'] disk_size = module.params['disk_size'] raid_size = module.params['raid_size'] raid_type = module.params['raid_type'] results = {} results['changed'] = False s = NaServer(cluster, 1, 0) s.set_server_type("FILER") s.set_transport_type("HTTPS") s.set_port(443) s.set_style("LOGIN") s.set_admin_user(user_name, password) api = NaElement("aggr-create") api.child_add_string("disk-type", disk_type) api.child_add_string("aggregate", aggr) api.child_add_string("disk-count", disk_count) api.child_add_string("disk-size-with-unit", disk_size) api.child_add_string("raid-size", raid_size) api.child_add_string("raid-type", raid_type) xi = NaElement("nodes") api.child_add(xi) xi.child_add_string("node-name", node) xo = s.invoke_elem(api) if (xo.results_errno() != 0): r = xo.results_reason() module.fail_json(msg=r) results['changed'] = False else: results['changed'] = True return results