def test_update_volume_xml(self): connection_info = { 'driver_volume_type': 'iscsi', 'serial': '58a84f6d-3f0c-4e19-a0af-eb657b790657', 'data': { 'access_mode': 'rw', 'target_discovered': False, 'target_iqn': 'ip-1.2.3.4:3260-iqn.cde.67890.opst-lun-Z', 'volume_id': '58a84f6d-3f0c-4e19-a0af-eb657b790657', 'device_path': '/dev/disk/by-path/ip-1.2.3.4:3260-iqn.cde.67890.opst-lun-Z' } } bdm = objects.LibvirtLiveMigrateBDMInfo( serial='58a84f6d-3f0c-4e19-a0af-eb657b790657', bus='virtio', type='disk', dev='vdb', connection_info=connection_info) data = objects.LibvirtLiveMigrateData(target_connect_addr='127.0.0.1', bdms=[bdm], block_migration=False) xml = """<domain> <devices> <disk type='block' device='disk'> <driver name='qemu' type='raw' cache='none'/> <source dev='/dev/disk/by-path/ip-1.2.3.4:3260-iqn.abc.12345.opst-lun-X'/> <target bus='virtio' dev='vdb'/> <serial>58a84f6d-3f0c-4e19-a0af-eb657b790657</serial> <address type='pci' domain='0x0' bus='0x0' slot='0x04' function='0x0'/> </disk> </devices> </domain>""" conf = vconfig.LibvirtConfigGuestDisk() conf.source_device = bdm.type conf.driver_name = "qemu" conf.driver_format = "raw" conf.driver_cache = "none" conf.target_dev = bdm.dev conf.target_bus = bdm.bus conf.serial = bdm.connection_info.get('serial') conf.source_type = "block" conf.source_path = bdm.connection_info['data'].get('device_path') get_volume_config = mock.MagicMock(return_value=conf) doc = etree.fromstring(xml) res = etree.tostring(migration._update_volume_xml( doc, data, get_volume_config), encoding='unicode') new_xml = xml.replace('ip-1.2.3.4:3260-iqn.abc.12345.opst-lun-X', 'ip-1.2.3.4:3260-iqn.cde.67890.opst-lun-Z') self.assertThat(res, matchers.XMLMatches(new_xml))
def _bdms_from_legacy(self, legacy_pre_result): self.bdms = [] volume = legacy_pre_result.get('volume', {}) for serial in volume: vol = volume[serial] bdmi = objects.LibvirtLiveMigrateBDMInfo(serial=serial) bdmi.connection_info = vol['connection_info'] bdmi.bus = vol['disk_info']['bus'] bdmi.dev = vol['disk_info']['dev'] bdmi.type = vol['disk_info']['type'] if 'format' in vol: bdmi.format = vol['disk_info']['format'] if 'boot_index' in vol: bdmi.boot_index = int(vol['disk_info']['boot_index']) self.bdms.append(bdmi)
def test_update_volume_xml_update_encryption(self): connection_info = { 'driver_volume_type': 'rbd', 'serial': 'd299a078-f0db-4993-bf03-f10fe44fd192', 'data': { 'access_mode': 'rw', 'secret_type': 'ceph', 'name': 'cinder-volumes/volume-d299a078', 'encrypted': False, 'discard': True, 'cluster_name': 'ceph', 'secret_uuid': '1a790a26-dd49-4825-8d16-3dd627cf05a9', 'qos_specs': None, 'auth_enabled': True, 'volume_id': 'd299a078-f0db-4993-bf03-f10fe44fd192', 'hosts': ['172.16.128.101', '172.16.128.121'], 'auth_username': '******', 'ports': ['6789', '6789', '6789'] } } bdm = objects.LibvirtLiveMigrateBDMInfo( serial='d299a078-f0db-4993-bf03-f10fe44fd192', bus='scsi', type='disk', dev='sdb', connection_info=connection_info, encryption_secret_uuid=uuids.encryption_secret_uuid_new) data = objects.LibvirtLiveMigrateData(target_connect_addr=None, bdms=[bdm], block_migration=False) xml = """<domain> <devices> <disk type='network' device='disk'> <driver name='qemu' type='raw' cache='writeback' discard='unmap'/> <auth username='******'> <secret type='ceph' uuid='1a790a26-dd49-4825-8d16-3dd627cf05a9'/> </auth> <source protocol='rbd' name='cinder-volumes/volume-d299a078'> <host name='172.16.128.101' port='6789'/> <host name='172.16.128.121' port='6789'/> </source> <backingStore/> <target dev='sdb' bus='scsi'/> <serial>d299a078-f0db-4993-bf03-f10fe44fd192</serial> <alias name='scsi0-0-0-1'/> <encryption format='luks'> <secret type='passphrase' uuid='%(encryption_secret_uuid)s'/> </encryption> <address type='drive' controller='0' bus='0' target='0' unit='1'/> </disk> </devices> </domain>""" % { 'encryption_secret_uuid': uuids.encryption_secret_uuid_old } conf = vconfig.LibvirtConfigGuestDisk() conf.source_device = bdm.type conf.driver_name = "qemu" conf.driver_format = "raw" conf.driver_cache = "writeback" conf.target_dev = bdm.dev conf.target_bus = bdm.bus conf.serial = bdm.connection_info.get('serial') conf.source_type = "network" conf.driver_discard = 'unmap' conf.device_addr = vconfig.LibvirtConfigGuestDeviceAddressDrive() conf.device_addr.controller = 0 get_volume_config = mock.MagicMock(return_value=conf) doc = etree.fromstring(xml) res = etree.tostring(migration._update_volume_xml( doc, data, get_volume_config), encoding='unicode') new_xml = xml.replace(uuids.encryption_secret_uuid_old, uuids.encryption_secret_uuid_new) self.assertThat(res, matchers.XMLMatches(new_xml))