diff --git a/nova/rootwrap/compute.py b/nova/rootwrap/compute.py index 8b7736cb..65e6dfeb 100755 --- a/nova/rootwrap/compute.py +++ b/nova/rootwrap/compute.py @@ -168,4 +168,7 @@ filterlist = [ # nova/virt/libvirt/utils.py: 'mkswap' # nova/virt/xenapi/vm_utils.py: 'mkswap' filters.CommandFilter("/sbin/mkswap", "root"), + + # nova/virt/libvirt/connection.py: + filters.ReadFileFilter("/etc/iscsi/initiatorname.iscsi"), ] diff --git a/nova/tests/fake_libvirt_utils.py b/nova/tests/fake_libvirt_utils.py index f1d4a8ec..27b753a6 100644 --- a/nova/tests/fake_libvirt_utils.py +++ b/nova/tests/fake_libvirt_utils.py @@ -21,6 +21,10 @@ disk_sizes = {} disk_backing_files = {} +def get_iscsi_initiator(): + return "fake.initiator.iqn" + + def create_image(disk_format, path, size): pass diff --git a/nova/tests/test_libvirt.py b/nova/tests/test_libvirt.py index cbe45ed2..72c9f880 100644 --- a/nova/tests/test_libvirt.py +++ b/nova/tests/test_libvirt.py @@ -123,6 +123,10 @@ class LibvirtVolumeTestCase(test.TestCase): def get_hypervisor_type(self): return self.hyperv self.fake_conn = FakeLibvirtConnection("Xen") + self.connr = { + 'ip': '127.0.0.1', + 'initiator': 'fake_initiator' + } def test_libvirt_iscsi_driver(self): # NOTE(vish) exists is to make driver assume connecting worked @@ -136,8 +140,7 @@ class LibvirtVolumeTestCase(test.TestCase): 'name': name, 'provider_auth': None, 'provider_location': '%s,fake %s' % (location, iqn)} - address = '127.0.0.1' - connection_info = vol_driver.initialize_connection(vol, '127.0.0.1') + 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) @@ -145,7 +148,7 @@ class LibvirtVolumeTestCase(test.TestCase): 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, '127.0.0.1') + connection_info = vol_driver.terminate_connection(vol, self.connr) expected_commands = [('iscsiadm', '-m', 'node', '-T', iqn, '-p', location), ('iscsiadm', '-m', 'node', '-T', iqn, @@ -167,8 +170,7 @@ class LibvirtVolumeTestCase(test.TestCase): libvirt_driver = volume.LibvirtNetVolumeDriver(self.fake_conn) name = 'volume-00000001' vol = {'id': 1, 'name': name} - address = '127.0.0.1' - connection_info = vol_driver.initialize_connection(vol, address) + 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) @@ -176,15 +178,14 @@ class LibvirtVolumeTestCase(test.TestCase): self.assertEqual(tree.find('./source').get('protocol'), 'sheepdog') self.assertEqual(tree.find('./source').get('name'), name) libvirt_driver.disconnect_volume(connection_info, mount_device) - connection_info = vol_driver.terminate_connection(vol, '127.0.0.1') + connection_info = vol_driver.terminate_connection(vol, self.connr) def test_libvirt_rbd_driver(self): vol_driver = volume_driver.RBDDriver() libvirt_driver = volume.LibvirtNetVolumeDriver(self.fake_conn) name = 'volume-00000001' vol = {'id': 1, 'name': name} - address = '127.0.0.1' - connection_info = vol_driver.initialize_connection(vol, address) + 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) @@ -193,7 +194,7 @@ class LibvirtVolumeTestCase(test.TestCase): rbd_name = '%s/%s' % (FLAGS.rbd_pool, name) self.assertEqual(tree.find('./source').get('name'), rbd_name) libvirt_driver.disconnect_volume(connection_info, mount_device) - connection_info = vol_driver.terminate_connection(vol, '127.0.0.1') + connection_info = vol_driver.terminate_connection(vol, self.connr) class CacheConcurrencyTestCase(test.TestCase): @@ -355,6 +356,22 @@ class LibvirtConnTestCase(test.TestCase): return db.service_create(context.get_admin_context(), service_ref) + def test_get_connector(self): + initiator = 'fake.initiator.iqn' + ip = 'fakeip' + self.flags(my_ip=ip) + + conn = connection.LibvirtConnection(True) + expected = { + 'ip': ip, + 'initiator': initiator + } + volume = { + 'id': 'fake' + } + result = conn.get_volume_connector(volume) + self.assertDictMatch(expected, result) + def test_preparing_xml_info(self): conn = connection.LibvirtConnection(True) instance_ref = db.instance_create(self.context, self.test_instance) @@ -1764,6 +1781,17 @@ class NWFilterTestCase(test.TestCase): class LibvirtUtilsTestCase(test.TestCase): + def test_get_iscsi_initiator(self): + self.mox.StubOutWithMock(utils, 'execute') + initiator = 'fake.initiator.iqn' + rval = ("junk\nInitiatorName=%s\njunk\n" % initiator, None) + utils.execute('cat', '/etc/iscsi/initiatorname.iscsi', + run_as_root=True).AndReturn(rval) + # Start test + self.mox.ReplayAll() + result = libvirt_utils.get_iscsi_initiator() + self.assertEqual(initiator, result) + def test_create_image(self): self.mox.StubOutWithMock(utils, 'execute') utils.execute('qemu-img', 'create', '-f', 'raw', diff --git a/nova/tests/test_virt_drivers.py b/nova/tests/test_virt_drivers.py index adf8f8eb..c2d8524b 100644 --- a/nova/tests/test_virt_drivers.py +++ b/nova/tests/test_virt_drivers.py @@ -224,6 +224,12 @@ class _VirtDriverTestCase(test.TestCase): self.assertNotIn(instance_ref['name'], self.connection.list_instances()) + @catch_notimplementederror + def test_get_volume_connector(self): + result = self.connection.get_volume_connector({'id': 'fake'}) + self.assertTrue('ip' in result) + self.assertTrue('initiator' in result) + @catch_notimplementederror def test_attach_detach_volume(self): instance_ref, network_info = self._get_running_instance()