def get_vswitch_list(self): smut_userid = zvmutils.get_smut_userid() rd = ' '.join( ("SMAPI %s API Virtual_Network_Vswitch_Query" % smut_userid, "--operands", "-s \'*\'")) with zvmutils.expect_request_failed_and_reraise( exception.ZVMNetworkError): try: result = self._request(rd) except exception.ZVMClientRequestFailed as err: emsg = err.format_message() if ((err.results['rc'] == 212) and (err.results['rs'] == 40)): LOG.warning("No Virtual switch in the host") return [] else: raise exception.ZVMNetworkError( msg=("Failed to query vswitch list, %s") % emsg) if (not result['response'] or not result['response'][0]): return [] else: data = '\n'.join([ s for s in result['response'] if isinstance(s, const._TSTR_OR_TUNI) ]) output = re.findall('VSWITCH: Name: (.*)', data) return output
def _couple_nic(self, userid, vdev, vswitch_name, active=False): """Couple NIC to vswitch by adding vswitch into user direct.""" requestData = ' '.join( ('SMAPI %s' % userid, "API Virtual_Network_Adapter_Connect_Vswitch_DM", "--operands", "-v %s" % vdev, "-n %s" % vswitch_name)) with zvmutils.expect_request_failed_and_reraise( exception.ZVMNetworkError): self._request(requestData) # the inst must be active, or this call will failed if active: requestData = ' '.join( ('SMAPI %s' % userid, 'API Virtual_Network_Adapter_Connect_Vswitch', "--operands", "-v %s" % vdev, "-n %s" % vswitch_name)) try: self._request(requestData) except (exception.ZVMClientRequestFailed, exception.ZVMClientInternalError) as err1: results1 = err1.results msg1 = err1.format_message() if ((results1 is not None) and (results1['rc'] == 204) and (results1['rs'] == 20)): LOG.warning( "Virtual device %s already connected " "on the active guest system", vdev) else: persist_OK = True requestData = ' '.join( ('SMAPI %s' % userid, 'API Virtual_Network_Adapter_Disconnect_DM', "--operands", '-v %s' % vdev)) try: self._request(requestData) except (exception.ZVMClientRequestFailed, exception.ZVMClientInternalError) as err2: results2 = err2.results msg2 = err2.format_message() if ((results2 is not None) and (results2['rc'] == 212) and (results2['rs'] == 32)): persist_OK = True else: persist_OK = False if persist_OK: msg = ("Failed to couple nic %s to vswitch %s " "on the active guest system, %s") % ( vdev, vswitch_name, msg1) else: msg = ("Failed to couple nic %s to vswitch %s " "on the active guest system, %s, and " "failed to revoke user direct's changes, " "%s") % (vdev, vswitch_name, msg1, msg2) raise exception.ZVMNetworkError(msg) """Update information in switch table.""" self._NetDbOperator.switch_updat_record_with_switch( userid, vdev, vswitch_name)
def _create_nic(self, userid, vdev, nic_id=None, mac_addr=None, active=False): requestData = ' '.join( ('SMAPI %s API Virtual_Network_Adapter_Create_Extended_DM' % userid, "--operands", "-k image_device_number=%s" % vdev, "-k adapter_type=QDIO")) if mac_addr is not None: mac = ''.join(mac_addr.split(':'))[6:] requestData += ' -k mac_id=%s' % mac with zvmutils.expect_request_failed_and_reraise( exception.ZVMNetworkError): self._request(requestData) if active: if mac_addr is not None: LOG.warning("Ignore the mac address %s when " "adding nic on an active system" % mac_addr) requestData = ' '.join( ('SMAPI %s API Virtual_Network_Adapter_Create_Extended' % userid, "--operands", "-k image_device_number=%s" % vdev, "-k adapter_type=QDIO")) try: self._request(requestData) except (exception.ZVMClientRequestFailed, exception.ZVMClientInternalError) as err1: msg1 = err1.format_message() persist_OK = True requestData = ' '.join( ('SMAPI %s API Virtual_Network_Adapter_Delete_DM' % userid, "--operands", '-v %s' % vdev)) try: self._request(requestData) except exception.ZVMClientRequestFailed as err2: results = err2.results msg2 = err2.format_message() if ((results['rc'] == 404) and (results['rs'] == 8)): persist_OK = True else: persist_OK = False if persist_OK: msg = ("Failed to create nic %s for %s on the active " "guest system, %s") % (vdev, userid, msg1) else: msg = ("Failed to create nic %s for %s on the active " "guest system, %s, and failed to revoke user " "direct's changes, %s") % (vdev, userid, msg1, msg2) raise exception.ZVMNetworkError(msg) self._NetDbOperator.switch_add_record_for_nic(userid, vdev, port=nic_id)
def _uncouple_nic(self, userid, vdev, active=False): """Uncouple NIC from vswitch""" requestData = ' '.join( ('SMAPI %s' % userid, "API Virtual_Network_Adapter_Disconnect_DM", "--operands", "-v %s" % vdev)) try: self._request(requestData) except (exception.ZVMClientRequestFailed, exception.ZVMClientInternalError) as err: results = err.results emsg = err.format_message() if ((results is not None) and (results['rc'] == 212) and (results['rs'] == 32)): LOG.warning( "Virtual device %s is already disconnected " "in the guest's user direct", vdev) else: raise exception.ZVMNetworkError( msg=("Failed to uncouple nic %s " "in the guest's user direct, %s") % (vdev, emsg)) """Update information in switch table.""" self._NetDbOperator.switch_updat_record_with_switch(userid, vdev, None) # the inst must be active, or this call will failed if active: requestData = ' '.join( ('SMAPI %s' % userid, 'API Virtual_Network_Adapter_Disconnect', "--operands", "-v %s" % vdev)) try: self._request(requestData) except (exception.ZVMClientRequestFailed, exception.ZVMClientInternalError) as err: results = err.results emsg = err.format_message() if ((results is not None) and (results['rc'] == 204) and (results['rs'] == 48)): LOG.warning( "Virtual device %s is already " "disconnected on the active " "guest system", vdev) else: raise exception.ZVMNetworkError( msg=("Failed to uncouple nic %s " "on the active guest system, %s") % (vdev, emsg))
def delete_nic(self, userid, vdev, active=False): rd = ' '.join( ("SMAPI %s API Virtual_Network_Adapter_Delete_DM" % userid, '-v %s' % vdev)) with zvmutils.expect_request_failed_and_reraise( exception.ZVMNetworkError): try: self._request(rd) except exception.ZVMClientRequestFailed as err: results = err.results emsg = err.format_message() if ((results['rc'] == 404) and (results['rs'] == 8)): LOG.warning( "Virtual device %s does not exist in " "the guest's user direct", vdev) else: raise exception.ZVMNetworkError( msg=("Failed to delete nic %s for %s in " "the guest's user direct, %s") % (vdev, userid, emsg)) self._NetDbOperator.switch_delete_record_for_nic(userid, vdev) if active: rd = ' '.join( ("SMAPI %s API Virtual_Network_Adapter_Delete" % userid, '-v %s' % vdev)) with zvmutils.expect_request_failed_and_reraise( exception.ZVMNetworkError): try: self._request(rd) except exception.ZVMClientRequestFailed as err: results = err.results emsg = err.format_message() if ((results['rc'] == 204) and (results['rs'] == 8)): LOG.warning( "Virtual device %s does not exist on " "the active guest system", vdev) else: raise exception.ZVMNetworkError( msg=("Failed to delete nic %s for %s on " "the active guest system, %s") % (vdev, userid, emsg))
def create_nic(self, userid, vdev=None, nic_id=None, mac_addr=None, ip_addr=None, active=False): ports_info = self._NetDbOperator.switch_select_table() vdev_info = [] for p in ports_info: if p[0] == userid: vdev_info.append(p[1]) if len(vdev_info) == 0: # no nic defined for the guest if vdev is None: nic_vdev = CONF.zvm.default_nic_vdev else: nic_vdev = vdev else: if vdev is None: used_vdev = max(vdev_info) nic_vdev = str(hex(int(used_vdev, 16) + 3))[2:] else: if self._is_vdev_valid(vdev, vdev_info): nic_vdev = vdev else: raise exception.ZVMInvalidInput( msg=("The specified virtual device number %s " "has already been used" % vdev)) if len(nic_vdev) > 4: raise exception.ZVMNetworkError( msg=("Virtual device number %s is not valid" % nic_vdev)) LOG.debug( 'Nic attributes: vdev is %(vdev)s, ' 'ID is %(id)s, address is %(address)s', { 'vdev': nic_vdev, 'id': nic_id or 'not specified', 'address': mac_addr or 'not specified' }) self._create_nic(userid, nic_vdev, nic_id=nic_id, mac_addr=mac_addr, active=active) return nic_vdev
def delete_vswitch(self, switch_name, persist=True): smut_userid = zvmutils.get_smut_userid() rd = ' '.join( ("SMAPI %s API Virtual_Network_Vswitch_Delete_Extended" % smut_userid, "--operands", "-k switch_name=%s" % switch_name, "-k persist=%s" % (persist and 'YES' or 'NO'))) with zvmutils.expect_request_failed_and_reraise( exception.ZVMNetworkError): try: self._request(rd) except exception.ZVMClientRequestFailed as err: results = err.results emsg = err.format_message() if ((results['rc'] == 212) and (results['rs'] == 40)): LOG.warning("Vswitch %s does not exist", switch_name) return else: raise exception.ZVMNetworkError( msg=("Failed to delete vswitch %s: %s") % (switch_name, emsg))