示例#1
0
    def test_libvirt_kvm_volume_with_multipath_still_in_use(self):
        name = 'volume-00000001'
        location = '10.0.2.15:3260'
        iqn = 'iqn.2010-10.org.openstack:%s' % name
        mpdev_filepath = '/dev/mapper/foo'

        def _get_multipath_device_name(path):
            if '%s-lun-1' % iqn in path:
                return mpdev_filepath
            return '/dev/mapper/donotdisconnect'

        self.flags(iscsi_use_multipath=True, group='libvirt')
        self.stubs.Set(os.path, 'exists', lambda x: True)

        libvirt_driver = volume.LibvirtISCSIVolumeDriver(self.fake_conn)
        libvirt_driver._get_multipath_device_name =\
            lambda x: _get_multipath_device_name(x)

        block_devs = ['/dev/disks/by-path/%s-iscsi-%s-lun-2' % (location, iqn)]
        self.stubs.Set(self.fake_conn, 'get_all_block_devices',
                       lambda: block_devs)

        vol = {'id': 1, 'name': name}
        connection_info = self.iscsi_connection(vol, location, iqn)
        connection_info['data']['device_path'] = mpdev_filepath

        libvirt_driver._get_multipath_iqn = lambda x: iqn

        iscsi_devs = [
            '1.2.3.4-iscsi-%s-lun-1' % iqn,
            '%s-iscsi-%s-lun-1' % (location, iqn),
            '%s-iscsi-%s-lun-2' % (location, iqn)
        ]
        libvirt_driver._get_iscsi_devices = lambda: iscsi_devs

        self.stubs.Set(libvirt_driver,
                       '_get_target_portals_from_iscsiadm_output',
                       lambda x: [[location, iqn]])

        # Set up disconnect volume mock expectations
        self.mox.StubOutWithMock(libvirt_driver, '_delete_device')
        self.mox.StubOutWithMock(libvirt_driver, '_rescan_multipath')
        libvirt_driver._rescan_multipath()
        libvirt_driver._delete_device('/dev/disk/by-path/%s' % iscsi_devs[0])
        libvirt_driver._delete_device('/dev/disk/by-path/%s' % iscsi_devs[1])
        libvirt_driver._rescan_multipath()

        # Ensure that the mpath devices are deleted
        self.mox.ReplayAll()
        libvirt_driver.disconnect_volume(connection_info, 'vde')
示例#2
0
 def test_libvirt_kvm_volume_with_multipath(self):
     self.flags(libvirt_iscsi_use_multipath=True)
     self.stubs.Set(os.path, 'exists', lambda x: True)
     devs = ['/dev/mapper/sda', '/dev/mapper/sdb']
     self.stubs.Set(self.fake_conn, 'get_all_block_devices', lambda: devs)
     libvirt_driver = volume.LibvirtISCSIVolumeDriver(self.fake_conn)
     connection_info = self.iscsi_connection(self.vol, self.location,
                                             self.iqn)
     mpdev_filepath = '/dev/mapper/foo'
     connection_info['data']['device_path'] = mpdev_filepath
     target_portals = ['fake_portal1', 'fake_portal2']
     libvirt_driver._get_multipath_device_name = lambda x: mpdev_filepath
     conf = libvirt_driver.connect_volume(connection_info, self.disk_info)
     tree = conf.format_dom()
     self.assertEqual(tree.find('./source').get('dev'), mpdev_filepath)
     libvirt_driver.disconnect_volume(connection_info, 'vde')
    def test_sanitize_log_run_iscsiadm(self):
        # Tests that the parameters to the _run_iscsiadm function are sanitized
        # for passwords when logged.
        def fake_debug(*args, **kwargs):
            self.assertIn('node.session.auth.password', args[0])
            self.assertNotIn('scrubme', args[0])

        libvirt_driver = volume.LibvirtISCSIVolumeDriver(self.fake_conn)
        connection_info = self.iscsi_connection(self.vol, self.location,
                                                self.iqn)
        iscsi_properties = connection_info['data']
        with mock.patch.object(volume.LOG, 'debug',
                               side_effect=fake_debug) as debug_mock:
            libvirt_driver._iscsiadm_update(iscsi_properties,
                                            'node.session.auth.password',
                                            'scrubme')
            # we don't care what the log message is, we just want to make sure
            # our stub method is called which asserts the password is scrubbed
            self.assertTrue(debug_mock.called)
示例#4
0
 def test_libvirt_kvm_volume(self):
     self.stubs.Set(os.path, 'exists', lambda x: True)
     libvirt_driver = volume.LibvirtISCSIVolumeDriver(self.fake_conn)
     name = 'volume-00000001'
     location = '10.0.2.15:3260'
     iqn = 'iqn.2010-10.org.openstack:%s' % name
     vol = {'id': 1, 'name': name}
     connection_info = self.iscsi_connection(vol, location, iqn)
     disk_info = {
         "bus": "virtio",
         "dev": "vde",
         "type": "disk",
     }
     conf = libvirt_driver.connect_volume(connection_info, disk_info)
     tree = conf.format_dom()
     dev_str = '/dev/disk/by-path/ip-%s-iscsi-%s-lun-1' % (location, iqn)
     self.assertEqual(tree.get('type'), 'block')
     self.assertEqual(tree.find('./source').get('dev'), dev_str)
     libvirt_driver.disconnect_volume(connection_info, 'vde')
示例#5
0
    def test_libvirt_iscsi_driver_disconnect_multipath_error(self):
        libvirt_driver = volume.LibvirtISCSIVolumeDriver(self.fake_conn)
        devs = [
            '/dev/disk/by-path/ip-%s-iscsi-%s-lun-2' %
            (self.location, self.iqn)
        ]
        with contextlib.nested(
                mock.patch.object(os.path, 'exists', return_value=True),
                mock.patch.object(self.fake_conn,
                                  'get_all_block_devices',
                                  return_value=devs),
                mock.patch.object(libvirt_driver, '_rescan_multipath'),
                mock.patch.object(libvirt_driver, '_run_multipath'),
                mock.patch.object(
                    libvirt_driver,
                    '_get_multipath_device_name',
                    return_value='/dev/mapper/fake-multipath-devname'),
                mock.patch.object(libvirt_driver,
                                  '_get_target_portals_from_iscsiadm_output',
                                  return_value=[('fake-ip', 'fake-portal')]),
                mock.patch.object(libvirt_driver,
                                  '_get_multipath_iqn',
                                  return_value='fake-portal'),
        ) as (mock_exists, mock_devices, mock_rescan_multipath,
              mock_run_multipath, mock_device_name, mock_get_portals,
              mock_get_iqn):
            mock_run_multipath.side_effect = processutils.ProcessExecutionError
            name = 'volume-00000001'
            vol = {'id': 1, 'name': self.name}
            connection_info = self.iscsi_connection(vol, self.location,
                                                    self.iqn)
            conf = libvirt_driver.connect_volume(connection_info,
                                                 self.disk_info)
            tree = conf.format_dom()
            dev_name = 'ip-%s-iscsi-%s-lun-1' % (self.location, self.iqn)
            dev_str = '/dev/disk/by-path/%s' % dev_name
            self.assertEqual('block', tree.get('type'))
            self.assertEqual(dev_str, tree.find('./source').get('dev'))

            libvirt_driver.use_multipath = True
            libvirt_driver.disconnect_volume(connection_info, "vde")
            mock_run_multipath.assert_called_once_with(
                ['-f', 'fake-multipath-devname'], check_exit_code=[0, 1])
示例#6
0
 def test_libvirt_kvm_volume_with_multipath_getmpdev(self):
     self.flags(libvirt_iscsi_use_multipath=True)
     self.stubs.Set(os.path, 'exists', lambda x: True)
     libvirt_driver = volume.LibvirtISCSIVolumeDriver(self.fake_conn)
     name0 = 'volume-00000000'
     iqn0 = 'iqn.2010-10.org.openstack:%s' % name0
     dev0 = '/dev/disk/by-path/ip-%s-iscsi-%s-lun-0' % (self.location, iqn0)
     dev = '/dev/disk/by-path/ip-%s-iscsi-%s-lun-1' % (self.location,
                                                       self.iqn)
     devs = [dev0, dev]
     self.stubs.Set(self.fake_conn, 'get_all_block_devices', lambda: devs)
     connection_info = self.iscsi_connection(self.vol, self.location,
                                             self.iqn)
     mpdev_filepath = '/dev/mapper/foo'
     target_portals = ['fake_portal1', 'fake_portal2']
     libvirt_driver._get_multipath_device_name = lambda x: mpdev_filepath
     conf = libvirt_driver.connect_volume(connection_info, self.disk_info)
     tree = conf.format_dom()
     self.assertEqual(tree.find('./source').get('dev'), mpdev_filepath)
     libvirt_driver.disconnect_volume(connection_info, 'vde')
 def test_libvirt_kvm_volume_with_multipath(self):
     self.flags(iscsi_use_multipath=True, group='libvirt')
     self.stubs.Set(os.path, 'exists', lambda x: True)
     devs = ['/dev/mapper/sda', '/dev/mapper/sdb']
     self.stubs.Set(self.fake_conn, '_get_all_block_devices', lambda: devs)
     libvirt_driver = volume.LibvirtISCSIVolumeDriver(self.fake_conn)
     connection_info = self.iscsi_connection(self.vol, self.location,
                                             self.iqn)
     mpdev_filepath = '/dev/mapper/foo'
     connection_info['data']['device_path'] = mpdev_filepath
     libvirt_driver._get_multipath_device_name = lambda x: mpdev_filepath
     self.stubs.Set(libvirt_driver,
                    '_get_target_portals_from_iscsiadm_output',
                    lambda x: [[self.location, self.iqn]])
     conf = libvirt_driver.connect_volume(connection_info, self.disk_info)
     tree = conf.format_dom()
     self.assertEqual(tree.find('./source').get('dev'), mpdev_filepath)
     libvirt_driver._get_multipath_iqn = lambda x: self.iqn
     libvirt_driver.disconnect_volume(connection_info, 'vde')
     expected_multipath_cmd = ('multipath', '-f', 'foo')
     self.assertIn(expected_multipath_cmd, self.executes)
示例#8
0
 def test_libvirt_kvm_volume_with_multipath(self):
     self.flags(libvirt_iscsi_use_multipath=True)
     self.stubs.Set(os.path, 'exists', lambda x: True)
     devs = ['/dev/mapper/sda', '/dev/mapper/sdb']
     self.stubs.Set(self.fake_conn, 'get_all_block_devices', lambda: devs)
     libvirt_driver = volume.LibvirtISCSIVolumeDriver(self.fake_conn)
     name = 'volume-00000001'
     location = '10.0.2.15:3260'
     iqn = 'iqn.2010-10.org.openstack:%s' % name
     vol = {'id': 1, 'name': name}
     connection_info = self.iscsi_connection(vol, location, iqn)
     mpdev_filepath = '/dev/mapper/foo'
     connection_info['data']['device_path'] = mpdev_filepath
     disk_info = {
         "bus": "virtio",
         "dev": "vde",
         "type": "disk",
     }
     target_portals = ['fake_portal1', 'fake_portal2']
     libvirt_driver._get_multipath_device_name = lambda x: mpdev_filepath
     conf = libvirt_driver.connect_volume(connection_info, disk_info)
     tree = conf.format_dom()
     self.assertEqual(tree.find('./source').get('dev'), mpdev_filepath)
     libvirt_driver.disconnect_volume(connection_info, 'vde')
示例#9
0
 def test_libvirt_iscsi_driver(self):
     # NOTE(vish) exists is to make driver assume connecting worked
     self.stubs.Set(os.path, 'exists', lambda x: True)
     libvirt_driver = volume.LibvirtISCSIVolumeDriver(self.fake_conn)
     location = '10.0.2.15:3260'
     name = 'volume-00000001'
     iqn = 'iqn.2010-10.org.openstack:%s' % name
     vol = {'id': 1, 'name': name}
     connection_info = self.iscsi_connection(vol, location, iqn)
     disk_info = {
         "bus": "virtio",
         "dev": "vde",
         "type": "disk",
         }
     conf = libvirt_driver.connect_volume(connection_info, disk_info)
     tree = conf.format_dom()
     dev_str = '/dev/disk/by-path/ip-%s-iscsi-%s-lun-1' % (location, iqn)
     self.assertEqual(tree.get('type'), 'block')
     self.assertEqual(tree.find('./source').get('dev'), dev_str)
     libvirt_driver.disconnect_volume(connection_info, "vde")
     expected_commands = [('iscsiadm', '-m', 'node', '-T', iqn,
                           '-p', location),
                          ('iscsiadm', '-m', 'session'),
                          ('iscsiadm', '-m', 'node', '-T', iqn,
                           '-p', location, '--login'),
                          ('iscsiadm', '-m', 'node', '-T', iqn,
                           '-p', location, '--op', 'update',
                           '-n', 'node.startup', '-v', 'automatic'),
                          ('iscsiadm', '-m', 'node', '-T', iqn,
                           '-p', location, '--op', 'update',
                           '-n', 'node.startup', '-v', 'manual'),
                          ('iscsiadm', '-m', 'node', '-T', iqn,
                           '-p', location, '--logout'),
                          ('iscsiadm', '-m', 'node', '-T', iqn,
                           '-p', location, '--op', 'delete')]
     self.assertEqual(self.executes, expected_commands)
示例#10
0
 def test_rescan_multipath(self):
     libvirt_driver = volume.LibvirtISCSIVolumeDriver(self.fake_conn)
     libvirt_driver._rescan_multipath()
     expected_multipath_cmd = ('multipath', '-r')
     self.assertIn(expected_multipath_cmd, self.executes)