Change NFS driver to not throw exception without nfs shares file
Currently, the NFS driver throws an exception if there isn't at least an empty file in existence for the default /etc/cinder/nfs_shares file. This, however, isn't consistent with the documentation or the way that the driver actually works. If the nas_host and nas_share_path are configured the nfs_shares file is not used, so throwing an exception is not necessary. All the information for setting up the NFS shares is available in the config file. This change updates the NFS driver to only throw an exception if the configured nfs_shares file doesn't exist and nas_host and/or nas_share_path are missing. Unit tests are included with the change. Closes-bug: #1602459 Change-Id: Ic2697a25e5ff20c84d946515bde32a4697d326c6
This commit is contained in:
parent
b142c27163
commit
b04072ac9d
@ -1066,6 +1066,72 @@ class NfsDriverDoSetupTestCase(test.TestCase):
|
||||
mock_os_path_exists.assert_has_calls(
|
||||
[mock.call(self.configuration.nfs_shares_config)])
|
||||
|
||||
def test_setup_should_not_throw_error_if_host_and_share_set(self):
|
||||
"""do_setup shouldn't throw shares file error if host and share set."""
|
||||
|
||||
drv = nfs.NfsDriver(configuration=self.configuration)
|
||||
|
||||
self.override_config('nas_host', 'nfs-host1')
|
||||
self.override_config('nas_share_path', '/export')
|
||||
mock_os_path_exists = self.mock_object(os.path, 'exists')
|
||||
mock_os_path_exists.return_value = False
|
||||
mock_set_nas_sec_options = self.mock_object(nfs.NfsDriver,
|
||||
'set_nas_security_options')
|
||||
mock_set_nas_sec_options.return_value = True
|
||||
mock_execute = self.mock_object(drv, '_execute')
|
||||
mock_execute.return_value = True
|
||||
|
||||
drv.do_setup(self.context)
|
||||
|
||||
mock_os_path_exists.assert_not_called()
|
||||
|
||||
def test_setup_throw_error_if_shares_file_does_not_exist_no_host(self):
|
||||
"""do_setup should throw error if no shares file and no host set."""
|
||||
|
||||
drv = nfs.NfsDriver(configuration=self.configuration)
|
||||
|
||||
self.override_config('nas_share_path', '/export')
|
||||
mock_os_path_exists = self.mock_object(os.path, 'exists')
|
||||
mock_os_path_exists.return_value = False
|
||||
|
||||
with self.assertRaisesRegex(exception.NfsException,
|
||||
"NFS config file.*doesn't exist"):
|
||||
drv.do_setup(self.context)
|
||||
|
||||
mock_os_path_exists.assert_has_calls(
|
||||
[mock.call(self.configuration.nfs_shares_config)])
|
||||
|
||||
def test_setup_throw_error_if_shares_file_does_not_exist_no_share(self):
|
||||
"""do_setup should throw error if no shares file and no share set."""
|
||||
|
||||
drv = nfs.NfsDriver(configuration=self.configuration)
|
||||
|
||||
self.override_config('nas_host', 'nfs-host1')
|
||||
mock_os_path_exists = self.mock_object(os.path, 'exists')
|
||||
mock_os_path_exists.return_value = False
|
||||
|
||||
with self.assertRaisesRegex(exception.NfsException,
|
||||
"NFS config file.*doesn't exist"):
|
||||
drv.do_setup(self.context)
|
||||
|
||||
mock_os_path_exists.assert_has_calls(
|
||||
[mock.call(self.configuration.nfs_shares_config)])
|
||||
|
||||
def test_setup_throw_error_if_shares_file_doesnt_exist_no_share_host(self):
|
||||
"""do_setup should throw error if no shares file and no host/share."""
|
||||
|
||||
drv = nfs.NfsDriver(configuration=self.configuration)
|
||||
|
||||
mock_os_path_exists = self.mock_object(os.path, 'exists')
|
||||
mock_os_path_exists.return_value = False
|
||||
|
||||
with self.assertRaisesRegex(exception.NfsException,
|
||||
"NFS config file.*doesn't exist"):
|
||||
drv.do_setup(self.context)
|
||||
|
||||
mock_os_path_exists.assert_has_calls(
|
||||
[mock.call(self.configuration.nfs_shares_config)])
|
||||
|
||||
def test_setup_should_throw_exception_if_nfs_client_is_not_installed(self):
|
||||
"""do_setup should throw error if nfs client is not installed."""
|
||||
|
||||
|
@ -114,17 +114,28 @@ class NfsDriver(driver.ExtendVD, remotefs.RemoteFSDriver):
|
||||
"""Any initialization the volume driver does while starting."""
|
||||
super(NfsDriver, self).do_setup(context)
|
||||
|
||||
config = self.configuration.nfs_shares_config
|
||||
if not config:
|
||||
msg = (_("There's no NFS config file configured (%s)") %
|
||||
'nfs_shares_config')
|
||||
LOG.warning(msg)
|
||||
raise exception.NfsException(msg)
|
||||
if not os.path.exists(config):
|
||||
msg = (_("NFS config file at %(config)s doesn't exist") %
|
||||
{'config': config})
|
||||
LOG.warning(msg)
|
||||
raise exception.NfsException(msg)
|
||||
nas_host = getattr(self.configuration,
|
||||
'nas_host',
|
||||
None)
|
||||
nas_share_path = getattr(self.configuration,
|
||||
'nas_share_path',
|
||||
None)
|
||||
|
||||
# If both nas_host and nas_share_path are set we are not
|
||||
# going to use the nfs_shares_config file. So, only check
|
||||
# for its existence if it is going to be used.
|
||||
if((not nas_host) or (not nas_share_path)):
|
||||
config = self.configuration.nfs_shares_config
|
||||
if not config:
|
||||
msg = (_("There's no NFS config file configured (%s)") %
|
||||
'nfs_shares_config')
|
||||
LOG.warning(msg)
|
||||
raise exception.NfsException(msg)
|
||||
if not os.path.exists(config):
|
||||
msg = (_("NFS config file at %(config)s doesn't exist") %
|
||||
{'config': config})
|
||||
LOG.warning(msg)
|
||||
raise exception.NfsException(msg)
|
||||
|
||||
self.shares = {} # address : options
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user