From bc18906f01b10ca21a68b0b760503436caa4f91a Mon Sep 17 00:00:00 2001 From: "Jay S. Bryant" Date: Mon, 1 Apr 2019 15:59:37 -0500 Subject: [PATCH] Add upgrade check for Windows iSCSI driver. The WindowsDriver was renamed in the Queens release to WindowsISCSIDriver to avoid confusion with the SMB driver. The backwards compatibility for this has now been removed, so any cinder.conf settings still using cinder.volume.drivers.windows.windows.WindowsDriver must now be updated to use cinder.volume.drivers.windows.iscsi.WindowsISCSIDriver. The change includes the addtion of a function to get the enabled_drivers for a system as it is likely that the functionality will be useful for multiple update checks in the future. Change-Id: I34038c847b75f9f9bd1c4dd4d9a5803cd66ffc8d --- cinder/cmd/status.py | 47 +++++++++++++++++++ cinder/tests/unit/cmd/test_status.py | 32 +++++++++++++ doc/source/cli/cinder-status.rst | 1 + ...windows_iscsi_driver-5f4e0b93c7b92f53.yaml | 8 ++++ 4 files changed, 88 insertions(+) create mode 100644 releasenotes/notes/cinder-status-check-windows_iscsi_driver-5f4e0b93c7b92f53.yaml diff --git a/cinder/cmd/status.py b/cinder/cmd/status.py index 9e8540016ab..a2f8728eadb 100644 --- a/cinder/cmd/status.py +++ b/cinder/cmd/status.py @@ -18,12 +18,20 @@ import os import sys +from cinder import objects +from cinder import service # noqa from oslo_config import cfg from oslo_upgradecheck import upgradecheck as uc from cinder.policy import DEFAULT_POLICY_FILENAME import cinder.service # noqa +# We must first register Cinder's objects. Otherwise +# we cannot import the volume manager. +objects.register_all() + +import cinder.volume.manager as volume_manager + CONF = cfg.CONF SUCCESS = uc.Code.SUCCESS @@ -31,6 +39,20 @@ FAILURE = uc.Code.FAILURE WARNING = uc.Code.WARNING +def _get_enabled_drivers(): + """Returns a list of volume_driver entries""" + volume_drivers = [] + if CONF.enabled_backends: + for backend in filter(None, CONF.enabled_backends): + # Each backend group needs to be registered first + CONF.register_opts(volume_manager.volume_backend_opts, + group=backend) + volume_driver = CONF[backend]['volume_driver'] + volume_drivers.append(volume_driver) + + return volume_drivers + + class Checks(uc.UpgradeCommands): """Upgrade checks to run.""" @@ -151,10 +173,35 @@ class Checks(uc.UpgradeCommands): return uc.Result(SUCCESS) + def _check_legacy_windows_config(self): + """Checks to ensure that the Windows driver path is properly updated. + + The WindowsDriver was renamed in the Queens release to + WindowsISCSIDriver to avoid confusion with the SMB driver. + The backwards compatibility for this has now been removed, so + any cinder.conf settings still using + cinder.volume.drivers.windows.windows.WindowsDriver + must now be updated to use + cinder.volume.drivers.windows.iscsi.WindowsISCSIDriver. + """ + for volume_driver in _get_enabled_drivers(): + if (volume_driver == + "cinder.volume.drivers.windows.windows.WindowsDriver"): + return uc.Result( + FAILURE, + 'Setting volume_driver to ' + 'cinder.volume.drivers.windows.windows.WindowsDriver ' + 'is no longer supported. Please update to use ' + 'cinder.volume.drivers.windows.iscsi.WindowsISCSIDriver ' + 'in cinder.conf.') + + return uc.Result(SUCCESS) + _upgrade_checks = ( # added in Stein ('Backup Driver Path', _check_backup_module), ('Use of Policy File', _check_policy_file), + ('Windows Driver Path', _check_legacy_windows_config), # added in Train ('Periodic Interval Use', _check_periodic_interval), ('Use of Nest Quota Driver', _check_nested_quota), diff --git a/cinder/tests/unit/cmd/test_status.py b/cinder/tests/unit/cmd/test_status.py index 26997944015..ae8cb4fb0a1 100644 --- a/cinder/tests/unit/cmd/test_status.py +++ b/cinder/tests/unit/cmd/test_status.py @@ -20,6 +20,8 @@ import testtools from cinder.cmd import status +import cinder.volume.manager as volume_manager + CONF = cfg.CONF @@ -48,6 +50,16 @@ class TestCinderStatus(testtools.TestCase): CONF.set_override(key, value, group=group) self.addCleanup(CONF.clear_override, key, group=group) + def _set_volume_driver(self, volume_driver, enabled_backend): + CONF.register_opts(volume_manager.volume_backend_opts, + group=enabled_backend) + CONF.set_override('enabled_backends', enabled_backend) + CONF.set_override('volume_driver', volume_driver, + group=enabled_backend) + self.addCleanup(CONF.clear_override, 'volume_driver', + group=enabled_backend) + self.addCleanup(CONF.clear_override, 'enabled_backends') + def test_check_backup_module(self): self._set_config( 'backup_driver', @@ -123,3 +135,23 @@ class TestCinderStatus(testtools.TestCase): else: expected = uc.Code.WARNING self.assertEqual(expected, result.code) + + def test_check_legacy_win_conf(self): + self._set_volume_driver( + 'cinder.volume.drivers.windows.iscsi.WindowsISCSIDriver', + 'winiscsi') + result = self.checks._check_legacy_windows_config() + self.assertEqual(uc.Code.SUCCESS, result.code) + + def test_check_legacy_win_conf_fail(self): + self._set_volume_driver( + 'cinder.volume.drivers.windows.windows.WindowsDriver', + 'winiscsi') + result = self.checks._check_legacy_windows_config() + self.assertEqual(uc.Code.FAILURE, result.code) + self.assertIn('Please update to use', result.details) + + def test_check_legacy_win_conf_no_drivers(self): + self._set_config('enabled_backends', None) + result = self.checks._check_legacy_windows_config() + self.assertEqual(uc.Code.SUCCESS, result.code) diff --git a/doc/source/cli/cinder-status.rst b/doc/source/cli/cinder-status.rst index a19145bbe39..295092ee974 100644 --- a/doc/source/cli/cinder-status.rst +++ b/doc/source/cli/cinder-status.rst @@ -89,6 +89,7 @@ Upgrade class path and not just the module path. * Checks for the presence of a **policy.json** file have been added to warn if policy changes should be present in a **policy.yaml** file. + * Ensure that correct volume_driver path is used for Windows iSCSI driver. **15.0.0 (Train)** diff --git a/releasenotes/notes/cinder-status-check-windows_iscsi_driver-5f4e0b93c7b92f53.yaml b/releasenotes/notes/cinder-status-check-windows_iscsi_driver-5f4e0b93c7b92f53.yaml new file mode 100644 index 00000000000..1911fcb56a7 --- /dev/null +++ b/releasenotes/notes/cinder-status-check-windows_iscsi_driver-5f4e0b93c7b92f53.yaml @@ -0,0 +1,8 @@ +--- +upgrade: + - | + A new check is added to the ``cinder-status upgrade check`` CLI to check + for the use of ``cinder.volume.drivers.windows.windows.WindowsDriver`` + and a message is reported that the user needs to update the setting + to ``cinder.volume.drivers.windows.iscsi.WindowsISCSIDriver`` if + it is encountered.