Merge "Fixes nova-volume support for multiple luns"
This commit is contained in:
@@ -124,7 +124,11 @@ class LibvirtVolumeTestCase(test.TestCase):
|
|||||||
|
|
||||||
def get_hypervisor_type(self):
|
def get_hypervisor_type(self):
|
||||||
return self.hyperv
|
return self.hyperv
|
||||||
self.fake_conn = FakeLibvirtConnection("Xen")
|
|
||||||
|
def get_all_block_devices(self):
|
||||||
|
return []
|
||||||
|
|
||||||
|
self.fake_conn = FakeLibvirtConnection()
|
||||||
self.connr = {
|
self.connr = {
|
||||||
'ip': '127.0.0.1',
|
'ip': '127.0.0.1',
|
||||||
'initiator': 'fake_initiator'
|
'initiator': 'fake_initiator'
|
||||||
@@ -167,6 +171,38 @@ class LibvirtVolumeTestCase(test.TestCase):
|
|||||||
'-p', location, '--op', 'delete')]
|
'-p', location, '--op', 'delete')]
|
||||||
self.assertEqual(self.executes, expected_commands)
|
self.assertEqual(self.executes, expected_commands)
|
||||||
|
|
||||||
|
def test_libvirt_iscsi_driver_still_in_use(self):
|
||||||
|
# NOTE(vish) exists is to make driver assume connecting worked
|
||||||
|
self.stubs.Set(os.path, 'exists', lambda x: True)
|
||||||
|
vol_driver = volume_driver.ISCSIDriver()
|
||||||
|
libvirt_driver = volume.LibvirtISCSIVolumeDriver(self.fake_conn)
|
||||||
|
location = '10.0.2.15:3260'
|
||||||
|
name = 'volume-00000001'
|
||||||
|
iqn = 'iqn.2010-10.org.openstack:%s' % name
|
||||||
|
devs = ['/dev/disk/by-path/ip-%s-iscsi-%s-lun-1' % (location, iqn)]
|
||||||
|
self.stubs.Set(self.fake_conn, 'get_all_block_devices', lambda: devs)
|
||||||
|
vol = {'id': 1,
|
||||||
|
'name': name,
|
||||||
|
'provider_auth': None,
|
||||||
|
'provider_location': '%s,fake %s' % (location, iqn)}
|
||||||
|
connection_info = vol_driver.initialize_connection(vol, self.connr)
|
||||||
|
mount_device = "vde"
|
||||||
|
xml = libvirt_driver.connect_volume(connection_info, mount_device)
|
||||||
|
tree = xml_to_tree(xml)
|
||||||
|
dev_str = '/dev/disk/by-path/ip-%s-iscsi-%s-lun-0' % (location, iqn)
|
||||||
|
self.assertEqual(tree.get('type'), 'block')
|
||||||
|
self.assertEqual(tree.find('./source').get('dev'), dev_str)
|
||||||
|
libvirt_driver.disconnect_volume(connection_info, mount_device)
|
||||||
|
connection_info = vol_driver.terminate_connection(vol, self.connr)
|
||||||
|
expected_commands = [('iscsiadm', '-m', 'node', '-T', iqn,
|
||||||
|
'-p', location),
|
||||||
|
('iscsiadm', '-m', 'node', '-T', iqn,
|
||||||
|
'-p', location, '--login'),
|
||||||
|
('iscsiadm', '-m', 'node', '-T', iqn,
|
||||||
|
'-p', location, '--op', 'update',
|
||||||
|
'-n', 'node.startup', '-v', 'automatic')]
|
||||||
|
self.assertEqual(self.executes, expected_commands)
|
||||||
|
|
||||||
def test_libvirt_sheepdog_driver(self):
|
def test_libvirt_sheepdog_driver(self):
|
||||||
vol_driver = volume_driver.SheepdogDriver()
|
vol_driver = volume_driver.SheepdogDriver()
|
||||||
libvirt_driver = volume.LibvirtNetVolumeDriver(self.fake_conn)
|
libvirt_driver = volume.LibvirtNetVolumeDriver(self.fake_conn)
|
||||||
@@ -469,6 +505,57 @@ class LibvirtConnTestCase(test.TestCase):
|
|||||||
# Only one should be listed, since domain with ID 0 must be skiped
|
# Only one should be listed, since domain with ID 0 must be skiped
|
||||||
self.assertEquals(len(instances), 1)
|
self.assertEquals(len(instances), 1)
|
||||||
|
|
||||||
|
def test_get_all_block_devices(self):
|
||||||
|
xml = [
|
||||||
|
# NOTE(vish): id 0 is skipped
|
||||||
|
None,
|
||||||
|
"""
|
||||||
|
<domain type='kvm'>
|
||||||
|
<devices>
|
||||||
|
<disk type='file'>
|
||||||
|
<source file='filename'/>
|
||||||
|
</disk>
|
||||||
|
<disk type='block'>
|
||||||
|
<source dev='/path/to/dev/1'/>
|
||||||
|
</disk>
|
||||||
|
</devices>
|
||||||
|
</domain>
|
||||||
|
""",
|
||||||
|
"""
|
||||||
|
<domain type='kvm'>
|
||||||
|
<devices>
|
||||||
|
<disk type='file'>
|
||||||
|
<source file='filename'/>
|
||||||
|
</disk>
|
||||||
|
</devices>
|
||||||
|
</domain>
|
||||||
|
""",
|
||||||
|
"""
|
||||||
|
<domain type='kvm'>
|
||||||
|
<devices>
|
||||||
|
<disk type='file'>
|
||||||
|
<source file='filename'/>
|
||||||
|
</disk>
|
||||||
|
<disk type='block'>
|
||||||
|
<source dev='/path/to/dev/3'/>
|
||||||
|
</disk>
|
||||||
|
</devices>
|
||||||
|
</domain>
|
||||||
|
""",
|
||||||
|
]
|
||||||
|
|
||||||
|
def fake_lookup(id):
|
||||||
|
return FakeVirtDomain(xml[id])
|
||||||
|
|
||||||
|
self.mox.StubOutWithMock(connection.LibvirtConnection, '_conn')
|
||||||
|
connection.LibvirtConnection._conn.listDomainsID = lambda: range(4)
|
||||||
|
connection.LibvirtConnection._conn.lookupByID = fake_lookup
|
||||||
|
|
||||||
|
self.mox.ReplayAll()
|
||||||
|
conn = connection.LibvirtConnection(False)
|
||||||
|
devices = conn.get_all_block_devices()
|
||||||
|
self.assertEqual(devices, ['/path/to/dev/1', '/path/to/dev/3'])
|
||||||
|
|
||||||
@test.skip_if(missing_libvirt(), "Test requires libvirt")
|
@test.skip_if(missing_libvirt(), "Test requires libvirt")
|
||||||
def test_snapshot_in_ami_format(self):
|
def test_snapshot_in_ami_format(self):
|
||||||
self.flags(image_service='nova.image.fake.FakeImageService')
|
self.flags(image_service='nova.image.fake.FakeImageService')
|
||||||
|
|||||||
@@ -132,6 +132,7 @@ class XenAPIVolumeTestCase(test.TestCase):
|
|||||||
'volume_id': 1,
|
'volume_id': 1,
|
||||||
'target_iqn': 'iqn.2010-10.org.openstack:volume-00000001',
|
'target_iqn': 'iqn.2010-10.org.openstack:volume-00000001',
|
||||||
'target_portal': '127.0.0.1:3260,fake',
|
'target_portal': '127.0.0.1:3260,fake',
|
||||||
|
'target_lun': None,
|
||||||
'auth_method': 'CHAP',
|
'auth_method': 'CHAP',
|
||||||
'auth_method': 'fake',
|
'auth_method': 'fake',
|
||||||
'auth_method': 'fake',
|
'auth_method': 'fake',
|
||||||
|
|||||||
Reference in New Issue
Block a user