def execute(self, server, cmd_data_json): if ("node" not in cmd_data_json or "port" not in cmd_data_json): return self._CREATE_FAIL_RESPONSE( 'modify port request must have node and port defined, got: ' + str(cmd_data_json)) node = cmd_data_json["node"] port = cmd_data_json["port"] cmd = "net-port-modify" call = NaElement(cmd) call.child_add_string("node", node) call.child_add_string("port", port) for cmd_data_key, netapp_cmd_str in self.__cmd_mapping.items(): if cmd_data_key in cmd_data_json: call.child_add_string(netapp_cmd_str, cmd_data_json[cmd_data_key]) _, err_resp = self._INVOKE_CHECK(server, call, cmd + ": " + node + ":" + port) if err_resp: return err_resp return self._CREATE_EMPTY_RESPONSE(True, "")
def execute(self, server, cmd_data_json): if "name" not in cmd_data_json: return self._CREATE_FAIL_RESPONSE( 'create IPSpace request must have name' + ' defined, got: ' + str(cmd_data_json)) name = cmd_data_json["name"] cmd = "net-ipspaces-create" call = NaElement(cmd) call.child_add_string("ipspace", name) call.child_add_string("return-record", "true") resp, err_resp = self._INVOKE_CHECK(server, call, cmd + ": " + name) if err_resp: return err_resp if not (resp.child_get("result") and resp.child_get("result").child_get("net-ipspaces-info")): return self._CREATE_FAIL_RESPONSE( 'no ipspace info received from create, got: ' + resp.sprintf()) ipspace_info = resp.child_get("result").child_get("net-ipspaces-info") dd = {"uuid": self._GET_STRING(ipspace_info, "uuid")} return {'success': True, 'errmsg': '', 'data': dd}
def execute(self, server, cmd_data_json): if ( "name" not in cmd_data_json or "new_name" not in cmd_data_json): return self._CREATE_FAIL_RESPONSE( 'SVM rename request must have ' + 'name and new_name defined, got: ' + str(cmd_data_json)) name = cmd_data_json['name'] new_name = cmd_data_json['new_name'] cmd = "vserver-rename" call = NaElement(cmd) call.child_add_string("vserver-name", name) call.child_add_string("new-name", new_name) resp, err_resp = self._INVOKE_CHECK( server, call, cmd + ": " + name + ' --> ' + new_name) #LOGGER.debug(resp.sprintf()) if err_resp: return err_resp return self._CREATE_EMPTY_RESPONSE(True, "")
def svm_execute(self, svm, cmd_data_json): if ( "name" not in cmd_data_json): return self._CREATE_FAIL_RESPONSE( 'volume [' + self._get_simple_cmd() + '] request must have name ' + 'defined, got: ' + str(cmd_data_json)) name = cmd_data_json['name'] cmd = "volume-" + self._get_simple_cmd() call = NaElement(cmd) call.child_add_string("name", name) resp, err_resp = self._INVOKE_CHECK( svm, call, cmd + ": " + name) #LOGGER.debug(resp.sprintf()) if err_resp: return err_resp return self._CREATE_EMPTY_RESPONSE(True, "")
def execute(self, server, cmd_data_json): if ("node" not in cmd_data_json or "name" not in cmd_data_json or "ports" not in cmd_data_json): return self._CREATE_FAIL_RESPONSE( "port group port " + self._get_cmd_type() + " commands must" + " have node, name and ports defined" + ", got: " + str(cmd_data_json)) node = cmd_data_json["node"] name = cmd_data_json["name"] ports = cmd_data_json["ports"] cmd = ("net-port-ifgrp-" + self._get_cmd_type() + "-port") # ifgrp only allows add/remove of single port... for port in ports: call = NaElement(cmd) call.child_add_string("ifgrp-name", name) call.child_add_string("node", node) call.child_add_string("port", port) resp, err_resp = self._INVOKE_CHECK( server, call, cmd + ": " + node + " [" + name + "]" + self._get_cmd_type() + " " + port) if err_resp: return err_resp #LOGGER.debug(resp.sprintf()) return self._CREATE_EMPTY_RESPONSE(True, "")
def execute(self, server, cmd_data_json): if ( "name" not in cmd_data_json): return self._CREATE_FAIL_RESPONSE( self._get_simple_cmd() + ' SVM request must have name ' + 'defined, got: ' + str(cmd_data_json)) name = cmd_data_json['name'] cmd = "vserver-" + self._get_simple_cmd() call = NaElement(cmd) call.child_add_string("vserver-name", name) # force will only be present if set otherwise ommitted if 'force' in cmd_data_json: call.child_add_string('force', True) resp, err_resp = self._INVOKE_CHECK( server, call, cmd + ": " + name) #LOGGER.debug(resp.sprintf()) if err_resp: return err_resp return self._CREATE_EMPTY_RESPONSE(True, "")
def execute(self, server, cmd_data_json): if ("name" not in cmd_data_json or "ipspace" not in cmd_data_json): return self._CREATE_FAIL_RESPONSE( "broadcast domain delete commands must" + " have name and ipspace defined, got: " + str(cmd_data_json)) name = cmd_data_json["name"] ipspace = cmd_data_json["ipspace"] cmd = "net-port-broadcast-domain-destroy" call = NaElement(cmd) call.child_add_string("broadcast-domain", name) call.child_add_string("ipspace", ipspace) resp, err_resp = self._INVOKE_CHECK( server, call, cmd + ": " + name + " [" + ipspace + "]") if err_resp: return err_resp # LOGGER.debug(resp.sprintf()) dd = { "update_status": self._GET_STRING(resp, "port-update-status-combined"), } return {'success': True, 'errmsg': '', 'data': dd}
def mapping(self, svm): results = [] for igroup in self.igroup_name: api_call = NaElement('lun-map') api_call.child_add_string('path', self.path) api_call.child_add_string('initiator-group', igroup) output = svm.run_command(api_call) results.append( (output.results_status(), output.sprintf(), self.path, igroup)) return results
def add_initiators(self, svm): results = [] for wwpn in self.initiator_list: api_call = NaElement('igroup-add') api_call.child_add_string('initiator-group-name', self.initiator_group_name) api_call.child_add_string('initiator', wwpn) output = svm.run_command(api_call) results.append((output.results_status(), output.sprintf(), self.initiator_group_name, wwpn)) return results
def execute(self, server, cmd_data_json): if ("name" not in cmd_data_json or "ipspace" not in cmd_data_json or ("subnet" not in cmd_data_json and "gateway" not in cmd_data_json)): return self._CREATE_FAIL_RESPONSE( "subnet modify must" + " have name, ipspace and either" + " gateway or subnet defined" + ", got: " + str(cmd_data_json)) name = cmd_data_json["name"] ipspace = cmd_data_json["ipspace"] cmd = "net-subnet-modify" call = NaElement(cmd) call.child_add_string("subnet-name", name) call.child_add_string("ipspace", ipspace) if "gateway" in cmd_data_json: call.child_add_string("gateway", cmd_data_json["gateway"]) if "subnet" in cmd_data_json: call.child_add_string("subnet", cmd_data_json["subnet"]) _, err_resp = self._INVOKE_CHECK( server, call, cmd + ": " + name + " [" + ipspace + "] <-- " + str(cmd_data_json)) if err_resp: return err_resp # LOGGER.debug(resp.sprintf()) return self._CREATE_EMPTY_RESPONSE(True, "")
def execute(self, server, cmd_data_json): if ("node" not in cmd_data_json or "name" not in cmd_data_json or "mode" not in cmd_data_json or "dist" not in cmd_data_json): return self._CREATE_FAIL_RESPONSE( "port group create commands must" + " have node, name, mode" + " and distribution defined" + ", got: " + str(cmd_data_json)) node = cmd_data_json["node"] name = cmd_data_json["name"] mode = cmd_data_json["mode"] dist = cmd_data_json["dist"] cmd = "net-port-ifgrp-create" call = NaElement(cmd) call.child_add_string("distribution-function", dist) call.child_add_string("ifgrp-name", name) call.child_add_string("mode", mode) call.child_add_string("node", node) call.child_add_string("return-record", False) resp, err_resp = self._INVOKE_CHECK( server, call, cmd + ": " + node + " [" + name + "]") if err_resp: return err_resp #LOGGER.debug(resp.sprintf()) return self._CREATE_EMPTY_RESPONSE(True, "")
def execute(self, server, cmd_data_json): if "name" not in cmd_data_json: return self._CREATE_FAIL_RESPONSE( "broadcast domain status commands must" + " have name defined, got: " + str(cmd_data_json)) name = cmd_data_json["name"] cmd = "net-port-broadcast-domain-get-iter" call = NaElement(cmd) qe = NaElement("query") qe_bcdi = NaElement("net-port-broadcast-domain-info") qe_bcdi.child_add_string("broadcast-domain", name) qe.child_add(qe_bcdi) call.child_add(qe) dattr = NaElement("desired-attributes") bcdi = NaElement("net-port-broadcast-domain-info") bcdi.child_add_string("port-update-status-combined", "<port-update-status-combined>") dattr.child_add(bcdi) call.child_add(dattr) resp, err_resp = self._INVOKE_CHECK(server, call, cmd + ": " + name) if err_resp: return err_resp # LOGGER.debug(resp.sprintf()) bcd_cnt = self._GET_INT(resp, 'num-records') if bcd_cnt != 1: # too many bc domains found for query return self._CREATE_FAIL_RESPONSE( 'too many broadcast domains found for' + ' query: [' + str(cmd_data_json) + '] result is: ' + resp.sprintf()) if not resp.child_get("attributes-list"): return self._CREATE_FAIL_RESPONSE( 'no broadcast domain info data found in: ' + resp.sprintf()) bcd_info = resp.child_get("attributes-list").children_get()[0] dd = { "update_status": self._GET_STRING(bcd_info, "port-update-status-combined"), } return {'success': True, 'errmsg': '', 'data': dd}
def create(self, cluster): api_call = NaElement('aggr-create') api_call.child_add_string('aggregate', self.aggr_name) api_call.child_add_string('disk-count', self.disk_count) api_call.child_add_string('disk-type', self.disk_type) api_call.child_add_string('raid-type', self.raid_type) api_call.child_add_string('raid-size', self.raid_size) api_child_nodes = NaElement('nodes') api_child_nodes.child_add_string('node-name', self.node_name) api_call.child_add(api_child_nodes) output = cluster.run_command(api_call) return output.results_status(), output.sprintf()
def execute(self, server, cmd_data_json): if "name" not in cmd_data_json: return self._CREATE_FAIL_RESPONSE( 'delete ipspace must have name defined, got: ' + str(cmd_data_json)) name = cmd_data_json["name"] cmd = "net-ipspaces-destroy" call = NaElement(cmd) call.child_add_string("ipspace", name) _, err_resp = self._INVOKE_CHECK(server, call, cmd + ": " + name) if err_resp: return err_resp return self._CREATE_EMPTY_RESPONSE(True, "")
def create(self, cluster): api_call = NaElement('vserver-create-async') api_call.child_add_string('vserver-name', self.vserver_name) api_call.child_add_string('root-volume', self.root_volume) api_call.child_add_string('root-volume-aggregate', self.root_volume_aggregate) api_call.child_add_string('root-volume-security-style', self.root_volume_security_style) output = cluster.run_command(api_call) return output.results_status(), output.sprintf()
def create(self, svm): api_call = NaElement('lun-create-by-size') api_call.child_add_string('path', self.path) api_call.child_add_string('size', self.size) api_call.child_add_string('ostype', self.ostype) api_call.child_add_string('space-reservation-enabled', self.space_reservation_enabled) api_call.child_add_string('space-allocation-enabled', self.space_allocation_enabled) output = svm.run_command(api_call) return output.results_status(), output.sprintf()
def svm_execute(self, svm, cmd_data_json): if ( "name" not in cmd_data_json): return self._CREATE_FAIL_RESPONSE( 'SVM volume size request must have name ' + 'defined, got: ' + str(cmd_data_json)) name = cmd_data_json['name'] cmd = "volume-size" call = NaElement(cmd) call.child_add_string("volume", name) if 'size' in cmd_data_json: call.child_add_string( 'new-size', cmd_data_json['size']) resp, err_resp = self._INVOKE_CHECK( svm, call, cmd + ": " + name) #LOGGER.debug(resp.sprintf()) if err_resp: return err_resp dd = { "size": self._GET_STRING(resp, "volume-size"), } # if resp.child_get("result-jobid"): # dd["jobid"] = self._GET_INT(resp, "result-jobid") # if resp.child_get('result-error-code'): # dd["errno"] = self._GET_INT(resp, "result-error-code") # if resp.child_get('result-error-message'): # dd["errmsg"] = self._GET_STRING(resp, "result-error-message") return { 'success' : True, 'errmsg': '', 'data': dd}
def execute(self, server, cmd_data_json): if ("name" not in cmd_data_json or "ipspace" not in cmd_data_json): return self._CREATE_FAIL_RESPONSE('delete subnet must have name' + ' and ipspace defined, got: ' + str(cmd_data_json)) name = cmd_data_json["name"] ipspace = cmd_data_json["ipspace"] cmd = "net-subnet-destroy" call = NaElement(cmd) call.child_add_string("subnet-name", name) call.child_add_string("ipspace", ipspace) _, err_resp = self._INVOKE_CHECK( server, call, cmd + ": " + name + ' [' + ipspace + ']') if err_resp: return err_resp return self._CREATE_EMPTY_RESPONSE(True, "")
def execute(self, server, cmd_data_json): if ("name" not in cmd_data_json or "new_name" not in cmd_data_json): return self._CREATE_FAIL_RESPONSE( 'update/rename ipspace must have name' + ' and new_name defined, got: ' + str(cmd_data_json)) name = cmd_data_json["name"] new_name = cmd_data_json["new_name"] cmd = "net-ipspaces-rename" call = NaElement(cmd) call.child_add_string("ipspace", name) call.child_add_string("new-name", new_name) _, err_resp = self._INVOKE_CHECK(server, call, cmd + ": " + name + ' to ' + new_name) if err_resp: return err_resp return self._CREATE_EMPTY_RESPONSE(True, "")
def execute(self, server, cmd_data_json): if ("name" not in cmd_data_json or "ipspace" not in cmd_data_json or "ip_ranges" not in cmd_data_json): return self._CREATE_FAIL_RESPONSE( "subnet ip range " + self._get_cmd_type() + " commands must" + " have name, ipspace and ip_ranges defined" + ", got: " + str(cmd_data_json)) name = cmd_data_json["name"] ipspace = cmd_data_json["ipspace"] iprs = cmd_data_json["ip_ranges"] cmd = ("net-subnet-" + self._get_cmd_type() + "-ranges") call = NaElement(cmd) call.child_add_string("subnet-name", name) call.child_add_string("ipspace", ipspace) el_iprs = NaElement("ip-ranges") for ip_range in iprs: el_iprs.child_add_string("ip-range", ip_range) call.child_add(el_iprs) _, err_resp = self._INVOKE_CHECK( server, call, cmd + ": " + name + " [" + ipspace + "]" + self._get_cmd_type() + str(iprs)) if err_resp: return err_resp # LOGGER.debug(resp.sprintf()) return self._CREATE_EMPTY_RESPONSE(True, "")
def execute(self, server, cmd_data_json): if ("name" not in cmd_data_json or "ipspace" not in cmd_data_json or "new_name" not in cmd_data_json): return self._CREATE_FAIL_RESPONSE( "subnet rename commands must" + " have name, new name and ipspace defined" + ", got: " + str(cmd_data_json)) name = cmd_data_json["name"] ipspace = cmd_data_json["ipspace"] new_name = cmd_data_json["new_name"] cmd = "net-subnet-rename" call = NaElement(cmd) call.child_add_string("subnet-name", name) call.child_add_string("ipspace", ipspace) call.child_add_string("new-name", new_name) _, err_resp = self._INVOKE_CHECK( server, call, cmd + ": " + name + " [" + ipspace + "] --> " + new_name) if err_resp: return err_resp # LOGGER.debug(resp.sprintf()) return self._CREATE_EMPTY_RESPONSE(True, "")
def execute(self, server, cmd_data_json): if ("parent_name" not in cmd_data_json or "vlan_id" not in cmd_data_json): return self._CREATE_FAIL_RESPONSE( 'create vlan request must have parent name' + ' and vlan id defined, got: ' + str(cmd_data_json)) parent = cmd_data_json["parent_name"] vlan_id = cmd_data_json["vlan_id"] cmd = "net-vlan-create" call = NaElement(cmd) vi = NaElement("vlan-info") vi.child_add_string("parent-interface", parent) vi.child_add_string("vlanid", vlan_id) if "node_name" in cmd_data_json: vi.child_add_string("node", cmd_data_json["node_name"]) call.child_add(vi) _, err_resp = self._INVOKE_CHECK(server, call, cmd + ": " + parent + ":" + vlan_id) if err_resp: return err_resp return self._CREATE_EMPTY_RESPONSE(True, "")
def execute(self, server, cmd_data_json): if ( "name" not in cmd_data_json): return self._CREATE_FAIL_RESPONSE( 'delete SVM request must have name, ' + 'defined, got: ' + str(cmd_data_json)) name = cmd_data_json['name'] cmd = "vserver-destroy-async" call = NaElement(cmd) call.child_add_string("vserver-name", name) resp, err_resp = self._INVOKE_CHECK( server, call, cmd + ": " + name) #LOGGER.debug(resp.sprintf()) if err_resp: return err_resp dd = { "status": self._GET_STRING(resp, "result-status"), } if resp.child_get("result-jobid"): dd["jobid"] = self._GET_INT(resp, "result-jobid") if resp.child_get('result-error-code'): dd["errno"] = self._GET_INT(resp, "result-error-code") if resp.child_get('result-error-message'): dd["errmsg"] = self._GET_STRING(resp, "result-error-message") return { 'success' : True, 'errmsg': '', 'data': dd}
def execute(self, server, cmd_data_json): if ("node" not in cmd_data_json or "port" not in cmd_data_json): return self._CREATE_FAIL_RESPONSE( 'find port by pattern request must have' + ' node and port defined, got: ' + str(cmd_data_json)) node = cmd_data_json["node"] port = cmd_data_json["port"] cmd = "net-port-get-iter" call = NaElement(cmd) qe = NaElement("query") qe_npi = NaElement("net-port-info") qe_npi.child_add_string("node", node) qe_npi.child_add_string("port", port) qe.child_add(qe_npi) call.child_add(qe) des_attr = NaElement("desired-attributes") npi = NaElement("net-port-info") npi.child_add_string("port", "<port>") des_attr.child_add(npi) call.child_add(des_attr) resp, err_resp = self._INVOKE_CHECK(server, call, cmd + ": " + node + ":" + port) if err_resp: return err_resp #LOGGER.debug(resp.sprintf()) ports = [] if resp.child_get("attributes-list"): for port_info in resp.child_get("attributes-list").children_get(): ports.append(self._GET_STRING(port_info, "port")) return {'success': True, 'errmsg': '', 'data': {'ports': ports}}
def execute(self, server, cmd_data_json): if ("node" not in cmd_data_json or "name" not in cmd_data_json): return self._CREATE_FAIL_RESPONSE( "port group delete command must" + " have node and name defined" + ", got: " + str(cmd_data_json)) node = cmd_data_json["node"] name = cmd_data_json["name"] cmd = "net-port-ifgrp-destroy" call = NaElement(cmd) call.child_add_string("ifgrp-name", name) call.child_add_string("node", node) resp, err_resp = self._INVOKE_CHECK( server, call, cmd + ": " + node + " [" + name + "]") if err_resp: return err_resp #LOGGER.debug(resp.sprintf()) return self._CREATE_EMPTY_RESPONSE(True, "")
def create(self, svm): api_call = NaElement('igroup-create') api_call.child_add_string('initiator-group-name', self.initiator_group_name) api_call.child_add_string('initiator-group-type', self.initiator_group_type) api_call.child_add_string('os-type', self.os_type) output = svm.run_command(api_call) return output.results_status(), output.sprintf()
def execute(self, server, cmd_data_json): if ("name" not in cmd_data_json or "mtu" not in cmd_data_json): return self._CREATE_FAIL_RESPONSE( "broadcast domain create commands must" + " have name and mtu defined, got: " + str(cmd_data_json)) name = cmd_data_json["name"] mtu = cmd_data_json["mtu"] cmd = "net-port-broadcast-domain-create" call = NaElement(cmd) call.child_add_string("broadcast-domain", name) call.child_add_string("mtu", mtu) if "ipspace" in cmd_data_json: call.child_add_string("ipspace", cmd_data_json["ipspace"]) if "ports" in cmd_data_json: ports = NaElement("ports") for port_name in cmd_data_json["ports"]: ports.child_add_string("net-qualified-port-name", port_name) call.child_add(ports) resp, err_resp = self._INVOKE_CHECK(server, call, cmd + ": " + name) if err_resp: return err_resp # LOGGER.debug(resp.sprintf()) dd = { "update_status": self._GET_STRING(resp, "port-update-status-combined"), } return {'success': True, 'errmsg': '', 'data': dd}
def set_properties(self, cluster): api_call = NaElement('vserver-modify') api_call.child_add_string('vserver-name', self.vserver_name) api_child_aggrs = NaElement('aggr-list') for aggr in self.aggr_list: api_child_aggrs.child_add_string('aggr-name', aggr) api_child_protocols = NaElement('allowed-protocols') for protocol in self.allowed_protocols: api_child_protocols.child_add_string('protocol', protocol) api_call.child_add(api_child_aggrs) api_call.child_add(api_child_protocols) output = cluster.run_command(api_call) return output.results_status(), output.sprintf()
def execute(self, server, cmd_data_json): if ("name" not in cmd_data_json or "ipspace" not in cmd_data_json or "ports" not in cmd_data_json): return self._CREATE_FAIL_RESPONSE( "broadcast domain port " + self._get_cmd_type() + " commands must" + " have name, ipspace and ports defined" + ", got: " + str(cmd_data_json)) name = cmd_data_json["name"] ipspace = cmd_data_json["ipspace"] ports = cmd_data_json["ports"] cmd = ("net-port-broadcast-domain-" + self._get_cmd_type() + "-ports") call = NaElement(cmd) call.child_add_string("broadcast-domain", name) call.child_add_string("ipspace", ipspace) ports_el = NaElement("ports") for port_name in ports: ports_el.child_add_string("net-qualified-port-name", port_name) call.child_add(ports_el) resp, err_resp = self._INVOKE_CHECK( server, call, cmd + ": " + name + " [" + ipspace + "]" + self._get_cmd_type() + str(ports)) if err_resp: return err_resp # LOGGER.debug(resp.sprintf()) dd = { "update_status": self._GET_STRING(resp, "port-update-status-combined"), } return {'success': True, 'errmsg': '', 'data': dd}
def create(self, svm): api_call = NaElement('volume-create') api_call.child_add_string('volume', self.volume) api_call.child_add_string('containing-aggr-name', self.containing_aggr_name) api_call.child_add_string('size', self.size) api_call.child_add_string('volume-type', self.volume_type) api_call.child_add_string('volume-security-style', self.volume_security_style) api_call.child_add_string('snapshot-policy', self.snapshot_policy) api_call.child_add_string('percentage-snapshot-reserve', self.percentage_snapshot_reserve) api_call.child_add_string('efficiency-policy', self.efficiency_policy) output = svm.run_command(api_call) return output.results_status(), output.sprintf()