diff options
| author | Vishvananda Ishaya <vishvananda@gmail.com> | 2012-01-28 01:17:00 -0800 |
|---|---|---|
| committer | Vishvananda Ishaya <vishvananda@gmail.com> | 2012-02-04 11:35:16 -0800 |
| commit | 94d8553201e50e3e9e25992bfe4735addae4ffda (patch) | |
| tree | 881809bbeeb441ad70fe6abc139712f9486458a5 /nova/tests | |
| parent | 65e233133e801439caaa8265b0de68c70a04ccd2 (diff) | |
Add initiator to initialize_connection
Some volumes need to know the name of the initiator that will be
connecting to the iscsi volume. This adds a call down to the hypervisor
driver to get the ip and the initiator name for the vm before calling
initialize connection. This connection is passed down to the volume
driver so that it can be used to authenticate when the hypervisor
tries to connect to the volume.
* Adds initiator initialize_connection
* Makes a call to driver to get initiator name and ip address
* Gets initiator from openiscsi for libvirt
* Gets initiator from config for xenapi
* Add tests for the driver calls
* Fixes bug 924461
Change-Id: I5b6a2dd84560c7f7b447571e0abf0993e5512ca0
Diffstat (limited to 'nova/tests')
| -rw-r--r-- | nova/tests/fake_libvirt_utils.py | 4 | ||||
| -rw-r--r-- | nova/tests/test_libvirt.py | 46 | ||||
| -rw-r--r-- | nova/tests/test_virt_drivers.py | 6 |
3 files changed, 47 insertions, 9 deletions
diff --git a/nova/tests/fake_libvirt_utils.py b/nova/tests/fake_libvirt_utils.py index f1d4a8ec7..27b753a64 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 cbe45ed2f..72c9f8802 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 adf8f8eb8..c2d8524ba 100644 --- a/nova/tests/test_virt_drivers.py +++ b/nova/tests/test_virt_drivers.py @@ -225,6 +225,12 @@ class _VirtDriverTestCase(test.TestCase): 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() self.connection.attach_volume({'driver_volume_type': 'fake'}, |
