def live_migration(self, context, migrate_data): """Start the live migration. :param context: security context :param migrate_data: migration data from src and dest host. """ LOG.debug("Starting migration.", instance=self.instance) LOG.debug("Migrate data: %s" % migrate_data) # Get the vFC and vSCSI live migration mappings dest_pre_lm_data = migrate_data.get('pre_live_migration_result', {}) vfc_mappings = dest_pre_lm_data.get('vfc_lpm_mappings') vscsi_mappings = dest_pre_lm_data.get('vscsi_lpm_mappings') try: # Migrate the LPAR! mig.migrate_lpar(self.lpar_w, self.dest_data['dest_sys_name'], validate_only=False, tgt_mgmt_svr=self.dest_data['dest_ip'], tgt_mgmt_usr=self.dest_data.get('dest_user_id'), virtual_fc_mappings=vfc_mappings, virtual_scsi_mappings=vscsi_mappings) except Exception: LOG.error(_LE("Live migration failed."), instance=self.instance) raise finally: LOG.debug("Finished migration.", instance=self.instance)
def live_migration(self, context, migrate_data): """Start the live migration. :param context: security context :param migrate_data: a PowerVMLiveMigrateData object """ LOG.debug("Starting migration.", instance=self.instance) LOG.debug("Migrate data: %s" % migrate_data) # The passed in mig data has more info (dest data added), so replace self.mig_data = migrate_data # Get the vFC and vSCSI live migration mappings vol_data = migrate_data.vol_data vfc_mappings = vol_data.get('vfc_lpm_mappings') if vfc_mappings is not None: vfc_mappings = jsonutils.loads(vfc_mappings) vscsi_mappings = vol_data.get('vscsi_lpm_mappings') if vscsi_mappings is not None: vscsi_mappings = jsonutils.loads(vscsi_mappings) try: # Migrate the LPAR! mig.migrate_lpar( self.lpar_w, self.mig_data.dest_sys_name, validate_only=False, tgt_mgmt_svr=self.mig_data.dest_ip, tgt_mgmt_usr=self.mig_data.dest_user_id, virtual_fc_mappings=vfc_mappings, virtual_scsi_mappings=vscsi_mappings, sdn_override=True, vlan_check_override=True) except Exception: LOG.error(_LE("Live migration failed."), instance=self.instance) raise finally: LOG.debug("Finished migration.", instance=self.instance)
def live_migration(self, context, migrate_data): """Start the live migration. :param context: security context :param migrate_data: a PowerVMLiveMigrateData object """ LOG.debug("Starting migration. Migrate data: %s", migrate_data, instance=self.instance) # The passed in mig data has more info (dest data added), so replace self.mig_data = migrate_data # Get the vFC and vSCSI live migration mappings vol_data = migrate_data.vol_data vfc_mappings = vol_data.get('vfc_lpm_mappings') if vfc_mappings is not None: vfc_mappings = jsonutils.loads(vfc_mappings) vscsi_mappings = vol_data.get('vscsi_lpm_mappings') if vscsi_mappings is not None: vscsi_mappings = jsonutils.loads(vscsi_mappings) # Run the pre-live migration on the network objects network_infos = self.instance.info_cache.network_info trunks_to_del = [] for network_info in network_infos: trunks_to_del.extend( vif.pre_live_migrate_at_source(self.drvr.adapter, self.drvr.host_uuid, self.instance, network_info)) # Convert the network mappings into something the API can understand. vlan_mappings = self._convert_nl_io_mappings( migrate_data.vea_vlan_mappings) try: # Migrate the LPAR! mig.migrate_lpar(self.lpar_w, self.mig_data.dest_sys_name, validate_only=False, tgt_mgmt_svr=self.mig_data.dest_ip, tgt_mgmt_usr=self.mig_data.dest_user_id, virtual_fc_mappings=vfc_mappings, virtual_scsi_mappings=vscsi_mappings, vlan_mappings=vlan_mappings, sdn_override=True, vlan_check_override=True) # Delete the source side network trunk adapters for trunk_to_del in trunks_to_del: trunk_to_del.delete() except Exception: with excutils.save_and_reraise_exception(logger=LOG): LOG.exception("Live migration failed.", instance=self.instance) finally: LOG.debug("Finished migration.", instance=self.instance)
def test_migration(self, mock_run_job): # Test simple call mock_run_job.side_effect = u.get_parm_checker( self, '1234', [(mig.TGT_MGD_SYS, 'abc')], exp_timeout=1800 * 4) mig.migrate_lpar(self.lpar_w, 'abc') self.adpt.read.assert_called_once_with('LogicalPartition', '1234', suffix_parm='Migrate', suffix_type='do') # Test all parms self.adpt.read.reset_mock() parm_list = [(mig.TGT_MGD_SYS, 'abc'), (mig.TGT_RMT_HMC, 'host'), (mig.TGT_RMT_HMC_USR, 'usr'), (mig.DEST_MSP, 'vios1'), (mig.SRC_MSP, 'vios2'), (mig.SPP_ID, '5'), (mig.OVS_OVERRIDE, '2'), (mig.VLAN_BRIDGE_OVERRIDE, '2')] mapping_list = [(mig.VFC_MAPPINGS, ['1/1/1', '3/3/3//3']), (mig.VSCSI_MAPPINGS, ['2/2/2']), (mig.VLAN_MAPPINGS, ['001122334455/4', '001122334466/5/6 7'])] mock_run_job.side_effect = u.get_parm_checker( self, '1234', parm_list, exp_job_mappings=mapping_list, exp_timeout=1800 * 4) mig.migrate_lpar( self.lpar_w, 'abc', tgt_mgmt_svr='host', tgt_mgmt_usr='******', virtual_fc_mappings=['1/1/1', '3/3/3//3'], virtual_scsi_mappings=['2/2/2'], vlan_mappings=['001122334455/4', '001122334466/5/6 7'], dest_msp_name='vios1', source_msp_name='vios2', spp_id='5', sdn_override=True, vlan_check_override=True) self.adpt.read.assert_called_once_with('LogicalPartition', '1234', suffix_parm='Migrate', suffix_type='do') # Test simple validation call self.adpt.read.reset_mock() mock_run_job.side_effect = u.get_parm_checker( self, '1234', [(mig.TGT_MGD_SYS, 'abc')], exp_timeout=1800 * 4) mock_run_job.reset_mock() mig.migrate_lpar(self.lpar_w, 'abc', validate_only=True) self.adpt.read.assert_called_once_with('LogicalPartition', '1234', suffix_parm='MigrateValidate', suffix_type='do')
def test_migration(self, mock_run_job): # Test simple call mock_run_job.side_effect = u.get_parm_checker( self, '1234', [(mig.TGT_MGD_SYS, 'abc')], exp_timeout=1800) mig.migrate_lpar(self.lpar_w, 'abc') self.adpt.read.assert_called_once_with('LogicalPartition', '1234', suffix_parm='Migrate', suffix_type='do') # Test all parms self.adpt.read.reset_mock() parm_list = [(mig.TGT_MGD_SYS, 'abc'), (mig.TGT_RMT_HMC, 'host'), (mig.TGT_RMT_HMC_USR, 'usr'), (mig.DEST_MSP, 'vios1'), (mig.SRC_MSP, 'vios2')] mapping_list = [(mig.VFC_MAPPINGS, ['1/1/1', '3/3/3//3']), (mig.VSCSI_MAPPINGS, ['2/2/2'])] mock_run_job.side_effect = u.get_parm_checker( self, '1234', parm_list, exp_job_mappings=mapping_list, exp_timeout=1800) mig.migrate_lpar(self.lpar_w, 'abc', tgt_mgmt_svr='host', tgt_mgmt_usr='******', virtual_fc_mappings=['1/1/1', '3/3/3//3'], virtual_scsi_mappings=['2/2/2'], dest_msp_name='vios1', source_msp_name='vios2') self.adpt.read.assert_called_once_with('LogicalPartition', '1234', suffix_parm='Migrate', suffix_type='do') # Test simple validation call self.adpt.read.reset_mock() mock_run_job.side_effect = u.get_parm_checker( self, '1234', [(mig.TGT_MGD_SYS, 'abc')], exp_timeout=1800) mock_run_job.reset_mock() mig.migrate_lpar(self.lpar_w, 'abc', validate_only=True) self.adpt.read.assert_called_once_with('LogicalPartition', '1234', suffix_parm='MigrateValidate', suffix_type='do')