GPFS Path: Fix bugs related to initialization of GPFS Driver

Due to lack of GPFS path ('/usr/lpp/mmfs/bin/') export, driver
is not able to find the GPFS commands causing the initialization
failure.
With this patch, GPFS will be able to run all GPFS commands
irrespective of GPFS path export.

Change-Id: I1aa8baf884dfaa42c37e575f0b6e1317f18543a1
Closes-bug: #1690785
This commit is contained in:
digvijay2016 2017-05-15 16:19:16 +05:30
parent 481da3d9c6
commit e90dd3d711
3 changed files with 206 additions and 193 deletions

View File

@ -139,6 +139,10 @@ class GPFSShareDriver(driver.ExecuteMixin, driver.GaneshaMixin,
self.sshpool = None
self.ssh_connections = {}
self._gpfs_execute = None
if self.configuration.is_gpfs_node:
self.GPFS_PATH = ''
else:
self.GPFS_PATH = '/usr/lpp/mmfs/bin/'
def do_setup(self, context):
"""Any initialization the share driver does while starting."""
@ -236,7 +240,7 @@ class GPFSShareDriver(driver.ExecuteMixin, driver.GaneshaMixin,
def _check_gpfs_state(self):
try:
out, __ = self._gpfs_execute('mmgetstate', '-Y')
out, __ = self._gpfs_execute(self.GPFS_PATH + 'mmgetstate', '-Y')
except exception.ProcessExecutionError as e:
msg = (_('Failed to check GPFS state. Error: %(excmsg)s.') %
{'excmsg': e})
@ -269,7 +273,7 @@ class GPFSShareDriver(driver.ExecuteMixin, driver.GaneshaMixin,
def _is_gpfs_path(self, directory):
try:
self._gpfs_execute('mmlsattr', directory)
self._gpfs_execute(self.GPFS_PATH + 'mmlsattr', directory)
except exception.ProcessExecutionError as e:
msg = (_('%(dir)s is not on GPFS filesystem. Error: %(excmsg)s.') %
{'dir': directory, 'excmsg': e})
@ -320,8 +324,8 @@ class GPFSShareDriver(driver.ExecuteMixin, driver.GaneshaMixin,
# create fileset for the share, link it to root path and set max size
try:
self._gpfs_execute('mmcrfileset', fsdev, sharename,
'--inode-space', 'new')
self._gpfs_execute(self.GPFS_PATH + 'mmcrfileset', fsdev,
sharename, '--inode-space', 'new')
except exception.ProcessExecutionError as e:
msg = (_('Failed to create fileset on %(fsdev)s for '
'the share %(sharename)s. Error: %(excmsg)s.') %
@ -331,8 +335,8 @@ class GPFSShareDriver(driver.ExecuteMixin, driver.GaneshaMixin,
raise exception.GPFSException(msg)
try:
self._gpfs_execute('mmlinkfileset', fsdev, sharename, '-J',
sharepath)
self._gpfs_execute(self.GPFS_PATH + 'mmlinkfileset', fsdev,
sharename, '-J', sharepath)
except exception.ProcessExecutionError as e:
msg = (_('Failed to link fileset for the share %(sharename)s. '
'Error: %(excmsg)s.') %
@ -341,8 +345,8 @@ class GPFSShareDriver(driver.ExecuteMixin, driver.GaneshaMixin,
raise exception.GPFSException(msg)
try:
self._gpfs_execute('mmsetquota', fsdev + ':' + sharename,
'--block', '0:' + sizestr)
self._gpfs_execute(self.GPFS_PATH + 'mmsetquota', fsdev + ':' +
sharename, '--block', '0:' + sizestr)
except exception.ProcessExecutionError as e:
msg = (_('Failed to set quota for the share %(sharename)s. '
'Error: %(excmsg)s.') %
@ -373,7 +377,8 @@ class GPFSShareDriver(driver.ExecuteMixin, driver.GaneshaMixin,
# unlink and delete the share's fileset
try:
self._gpfs_execute('mmunlinkfileset', fsdev, sharename, '-f',
self._gpfs_execute(self.GPFS_PATH + 'mmunlinkfileset', fsdev,
sharename, '-f',
ignore_exit_code=ignore_exit_code)
except exception.ProcessExecutionError as e:
msg = (_('Failed unlink fileset for share %(sharename)s. '
@ -383,7 +388,8 @@ class GPFSShareDriver(driver.ExecuteMixin, driver.GaneshaMixin,
raise exception.GPFSException(msg)
try:
self._gpfs_execute('mmdelfileset', fsdev, sharename, '-f',
self._gpfs_execute(self.GPFS_PATH + 'mmdelfileset', fsdev,
sharename, '-f',
ignore_exit_code=ignore_exit_code)
except exception.ProcessExecutionError as e:
msg = (_('Failed delete fileset for share %(sharename)s. '
@ -420,8 +426,8 @@ class GPFSShareDriver(driver.ExecuteMixin, driver.GaneshaMixin,
)
try:
self._gpfs_execute('mmcrsnapshot', fsdev, snapshot['name'],
'-j', sharename)
self._gpfs_execute(self.GPFS_PATH + 'mmcrsnapshot', fsdev,
snapshot['name'], '-j', sharename)
except exception.ProcessExecutionError as e:
msg = (_('Failed to create snapshot %(snapshot)s. '
'Error: %(excmsg)s.') %
@ -435,8 +441,8 @@ class GPFSShareDriver(driver.ExecuteMixin, driver.GaneshaMixin,
fsdev = self._get_gpfs_device()
try:
self._gpfs_execute('mmdelsnapshot', fsdev, snapshot['name'],
'-j', sharename)
self._gpfs_execute(self.GPFS_PATH + 'mmdelsnapshot', fsdev,
snapshot['name'], '-j', sharename)
except exception.ProcessExecutionError as e:
msg = (_('Failed to delete snapshot %(snapshot)s. '
'Error: %(excmsg)s.') %
@ -464,8 +470,8 @@ class GPFSShareDriver(driver.ExecuteMixin, driver.GaneshaMixin,
sizestr = '%sG' % new_size
fsdev = self._get_gpfs_device()
try:
self._gpfs_execute('mmsetquota', fsdev + ':' + sharename,
'--block', '0:' + sizestr)
self._gpfs_execute(self.GPFS_PATH + 'mmsetquota', fsdev + ':' +
sharename, '--block', '0:' + sizestr)
except exception.ProcessExecutionError as e:
msg = (_('Failed to set quota for the share %(sharename)s. '
'Error: %(excmsg)s.') %
@ -571,8 +577,8 @@ class GPFSShareDriver(driver.ExecuteMixin, driver.GaneshaMixin,
def _is_share_valid(self, fsdev, location):
try:
out, __ = self._gpfs_execute('mmlsfileset', fsdev, '-J',
location, '-L', '-Y')
out, __ = self._gpfs_execute(self.GPFS_PATH + 'mmlsfileset', fsdev,
'-J', location, '-L', '-Y')
except exception.ProcessExecutionError:
msg = (_('Given share path %(share_path)s does not exist at '
'mount point %(mount_point)s.')
@ -593,8 +599,8 @@ class GPFSShareDriver(driver.ExecuteMixin, driver.GaneshaMixin,
def _get_share_name(self, fsdev, location):
try:
out, __ = self._gpfs_execute('mmlsfileset', fsdev, '-J',
location, '-L', '-Y')
out, __ = self._gpfs_execute(self.GPFS_PATH + 'mmlsfileset', fsdev,
'-J', location, '-L', '-Y')
except exception.ProcessExecutionError:
msg = (_('Given share path %(share_path)s does not exist at '
'mount point %(mount_point)s.')
@ -617,7 +623,8 @@ class GPFSShareDriver(driver.ExecuteMixin, driver.GaneshaMixin,
new_share_name = share['name']
new_export_location = self._local_path(new_share_name)
try:
self._gpfs_execute('mmunlinkfileset', fsdev, old_share_name, '-f')
self._gpfs_execute(self.GPFS_PATH + 'mmunlinkfileset', fsdev,
old_share_name, '-f')
except exception.ProcessExecutionError:
msg = _('Failed to unlink fileset for share %s.') % new_share_name
LOG.exception(msg)
@ -625,8 +632,8 @@ class GPFSShareDriver(driver.ExecuteMixin, driver.GaneshaMixin,
LOG.debug('Unlinked the fileset of share %s.', old_share_name)
try:
self._gpfs_execute('mmchfileset', fsdev, old_share_name,
'-j', new_share_name)
self._gpfs_execute(self.GPFS_PATH + 'mmchfileset', fsdev,
old_share_name, '-j', new_share_name)
except exception.ProcessExecutionError:
msg = _('Failed to rename fileset for share %s.') % new_share_name
LOG.exception(msg)
@ -635,8 +642,8 @@ class GPFSShareDriver(driver.ExecuteMixin, driver.GaneshaMixin,
{'old_share': old_share_name, 'new_share': new_share_name})
try:
self._gpfs_execute('mmlinkfileset', fsdev, new_share_name, '-J',
new_export_location)
self._gpfs_execute(self.GPFS_PATH + 'mmlinkfileset', fsdev,
new_share_name, '-J', new_export_location)
except exception.ProcessExecutionError:
msg = _('Failed to link fileset for the share %s.'
) % new_share_name
@ -656,8 +663,8 @@ class GPFSShareDriver(driver.ExecuteMixin, driver.GaneshaMixin,
LOG.debug('Changed the permission of share %s.', new_share_name)
try:
out, __ = self._gpfs_execute('mmlsquota', '-j', new_share_name,
'-Y', fsdev)
out, __ = self._gpfs_execute(self.GPFS_PATH + 'mmlsquota', '-j',
new_share_name, '-Y', fsdev)
except exception.ProcessExecutionError:
msg = _('Failed to check size for share %s.') % new_share_name
LOG.exception(msg)
@ -678,8 +685,8 @@ class GPFSShareDriver(driver.ExecuteMixin, driver.GaneshaMixin,
# (units.Mi * KB = 1GB)
if share_size < units.Mi:
try:
self._gpfs_execute('mmsetquota', fsdev + ':' + new_share_name,
'--block', '0:1G')
self._gpfs_execute(self.GPFS_PATH + 'mmsetquota', fsdev + ':' +
new_share_name, '--block', '0:1G')
except exception.ProcessExecutionError:
msg = _('Failed to set quota for share %s.') % new_share_name
LOG.exception(msg)
@ -693,8 +700,8 @@ class GPFSShareDriver(driver.ExecuteMixin, driver.GaneshaMixin,
share_size = int(math.ceil(float(share_size) / units.Mi))
if orig_share_size != share_size * units.Mi:
try:
self._gpfs_execute('mmsetquota', fsdev + ':' +
new_share_name, '--block', '0:' +
self._gpfs_execute(self.GPFS_PATH + 'mmsetquota', fsdev +
':' + new_share_name, '--block', '0:' +
str(share_size) + 'G')
except exception.ProcessExecutionError:
msg = _('Failed to set quota for share %s.'
@ -1027,10 +1034,14 @@ class CESHelper(NASHelperBase):
def __init__(self, execute, config_object):
super(CESHelper, self).__init__(execute, config_object)
self._execute = execute
if self.configuration.is_gpfs_node:
self.GPFS_PATH = ''
else:
self.GPFS_PATH = '/usr/lpp/mmfs/bin/'
def _execute_mmnfs_command(self, cmd, err_msg):
try:
out, __ = self._execute('mmnfs', 'export', *cmd)
out, __ = self._execute(self.GPFS_PATH + 'mmnfs', 'export', *cmd)
except exception.ProcessExecutionError as e:
msg = (_('%(err_msg)s Error: %(e)s.')
% {'err_msg': err_msg, 'e': e})

View File

@ -42,6 +42,7 @@ class GPFSShareDriverTestCase(test.TestCase):
super(GPFSShareDriverTestCase, self).setUp()
self._context = context.get_admin_context()
self._gpfs_execute = mock.Mock(return_value=('', ''))
self.GPFS_PATH = '/usr/lpp/mmfs/bin/'
self._helper_fake = mock.Mock()
CONF.set_default('driver_handles_share_servers', False)
@ -398,8 +399,8 @@ mmcesnfslsexport:nfsexports:HEADER:version:reserved:reserved:Path:Delegations:Cl
self._driver._gpfs_execute = mock.Mock(return_value=0)
self._driver._delete_share_snapshot(self.snapshot)
self._driver._gpfs_execute.assert_called_once_with(
'mmdelsnapshot', self.fakedev, self.snapshot['name'],
'-j', self.snapshot['share_name']
self.GPFS_PATH + 'mmdelsnapshot', self.fakedev,
self.snapshot['name'], '-j', self.snapshot['share_name']
)
self._driver._get_gpfs_device.assert_called_once_with()
@ -412,8 +413,8 @@ mmcesnfslsexport:nfsexports:HEADER:version:reserved:reserved:Path:Delegations:Cl
self._driver._delete_share_snapshot, self.snapshot)
self._driver._get_gpfs_device.assert_called_once_with()
self._driver._gpfs_execute.assert_called_once_with(
'mmdelsnapshot', self.fakedev, self.snapshot['name'],
'-j', self.snapshot['share_name']
self.GPFS_PATH + 'mmdelsnapshot', self.fakedev,
self.snapshot['name'], '-j', self.snapshot['share_name']
)
def test_extend_share(self):
@ -426,10 +427,8 @@ mmcesnfslsexport:nfsexports:HEADER:version:reserved:reserved:Path:Delegations:Cl
self._driver._gpfs_execute = mock.Mock(return_value=True)
self._driver._extend_share(self.share, 10)
self._driver._gpfs_execute.assert_called_once_with(
'mmsetquota',
self.fakedev + ':' + self.share['name'],
'--block',
'0:10G')
self.GPFS_PATH + 'mmsetquota', self.fakedev + ':' +
self.share['name'], '--block', '0:10G')
self._driver._get_gpfs_device.assert_called_once_with()
def test__extend_share_exception(self):
@ -439,12 +438,9 @@ mmcesnfslsexport:nfsexports:HEADER:version:reserved:reserved:Path:Delegations:Cl
)
self.assertRaises(exception.GPFSException,
self._driver._extend_share, self.share, 10)
self._driver._gpfs_execute.assert_called_once_with('mmsetquota',
self.fakedev +
':' +
self.share['name'],
'--block',
'0:10G')
self._driver._gpfs_execute.assert_called_once_with(
self.GPFS_PATH + 'mmsetquota', self.fakedev + ':' +
self.share['name'], '--block', '0:10G')
self._driver._get_gpfs_device.assert_called_once_with()
def test_update_access_allow(self):
@ -535,14 +531,16 @@ mmcesnfslsexport:nfsexports:HEADER:version:reserved:reserved:Path:Delegations:Cl
fakeout = "mmgetstate::state:\nmmgetstate::active:"
self._driver._gpfs_execute = mock.Mock(return_value=(fakeout, ''))
result = self._driver._check_gpfs_state()
self._driver._gpfs_execute.assert_called_once_with('mmgetstate', '-Y')
self._driver._gpfs_execute.assert_called_once_with(
self.GPFS_PATH + 'mmgetstate', '-Y')
self.assertEqual(result, True)
def test__check_gpfs_state_down(self):
fakeout = "mmgetstate::state:\nmmgetstate::down:"
self._driver._gpfs_execute = mock.Mock(return_value=(fakeout, ''))
result = self._driver._check_gpfs_state()
self._driver._gpfs_execute.assert_called_once_with('mmgetstate', '-Y')
self._driver._gpfs_execute.assert_called_once_with(
self.GPFS_PATH + 'mmgetstate', '-Y')
self.assertEqual(result, False)
def test__check_gpfs_state_wrong_output_exception(self):
@ -550,7 +548,8 @@ mmcesnfslsexport:nfsexports:HEADER:version:reserved:reserved:Path:Delegations:Cl
self._driver._gpfs_execute = mock.Mock(return_value=(fakeout, ''))
self.assertRaises(exception.GPFSException,
self._driver._check_gpfs_state)
self._driver._gpfs_execute.assert_called_once_with('mmgetstate', '-Y')
self._driver._gpfs_execute.assert_called_once_with(
self.GPFS_PATH + 'mmgetstate', '-Y')
def test__check_gpfs_state_exception(self):
self._driver._gpfs_execute = mock.Mock(
@ -558,7 +557,8 @@ mmcesnfslsexport:nfsexports:HEADER:version:reserved:reserved:Path:Delegations:Cl
)
self.assertRaises(exception.GPFSException,
self._driver._check_gpfs_state)
self._driver._gpfs_execute.assert_called_once_with('mmgetstate', '-Y')
self._driver._gpfs_execute.assert_called_once_with(
self.GPFS_PATH + 'mmgetstate', '-Y')
def test__is_dir_success(self):
fakeoutput = "directory"
@ -591,8 +591,8 @@ mmcesnfslsexport:nfsexports:HEADER:version:reserved:reserved:Path:Delegations:Cl
def test__is_gpfs_path_ok(self):
self._driver._gpfs_execute = mock.Mock(return_value=0)
result = self._driver._is_gpfs_path(self.fakefspath)
self._driver._gpfs_execute.assert_called_once_with('mmlsattr',
self.fakefspath)
self._driver._gpfs_execute.assert_called_once_with(
self.GPFS_PATH + 'mmlsattr', self.fakefspath)
self.assertEqual(result, True)
def test__is_gpfs_path_exception(self):
@ -602,8 +602,8 @@ mmcesnfslsexport:nfsexports:HEADER:version:reserved:reserved:Path:Delegations:Cl
self.assertRaises(exception.GPFSException,
self._driver._is_gpfs_path,
self.fakefspath)
self._driver._gpfs_execute.assert_called_once_with('mmlsattr',
self.fakefspath)
self._driver._gpfs_execute.assert_called_once_with(
self.GPFS_PATH + 'mmlsattr', self.fakefspath)
def test__get_gpfs_device(self):
fakeout = "Filesystem\n" + self.fakedev
@ -628,20 +628,17 @@ mmcesnfslsexport:nfsexports:HEADER:version:reserved:reserved:Path:Delegations:Cl
self._driver._local_path = mock.Mock(return_value=self.fakesharepath)
self._driver._get_gpfs_device = mock.Mock(return_value=self.fakedev)
self._driver._create_share(self.share)
self._driver._gpfs_execute.assert_any_call('mmcrfileset',
self.fakedev,
self.share['name'],
'--inode-space', 'new')
self._driver._gpfs_execute.assert_any_call('mmlinkfileset',
self.fakedev,
self.share['name'],
'-J', self.fakesharepath)
self._driver._gpfs_execute.assert_any_call('mmsetquota', self.fakedev +
':' + self.share['name'],
'--block', '0:' + sizestr)
self._driver._gpfs_execute.assert_any_call('chmod',
'777',
self.fakesharepath)
self._driver._gpfs_execute.assert_any_call(
self.GPFS_PATH + 'mmcrfileset', self.fakedev, self.share['name'],
'--inode-space', 'new')
self._driver._gpfs_execute.assert_any_call(
self.GPFS_PATH + 'mmlinkfileset', self.fakedev, self.share['name'],
'-J', self.fakesharepath)
self._driver._gpfs_execute.assert_any_call(
self.GPFS_PATH + 'mmsetquota', self.fakedev + ':' +
self.share['name'], '--block', '0:' + sizestr)
self._driver._gpfs_execute.assert_any_call(
'chmod', '777', self.fakesharepath)
self._driver._local_path.assert_called_once_with(self.share['name'])
self._driver._get_gpfs_device.assert_called_once_with()
@ -656,21 +653,19 @@ mmcesnfslsexport:nfsexports:HEADER:version:reserved:reserved:Path:Delegations:Cl
self._driver._create_share, self.share)
self._driver._get_gpfs_device.assert_called_once_with()
self._driver._local_path.assert_called_once_with(self.share['name'])
self._driver._gpfs_execute.assert_called_once_with('mmcrfileset',
self.fakedev,
self.share['name'],
'--inode-space',
'new')
self._driver._gpfs_execute.assert_called_once_with(
self.GPFS_PATH + 'mmcrfileset', self.fakedev, self.share['name'],
'--inode-space', 'new')
def test__delete_share(self):
self._driver._gpfs_execute = mock.Mock(return_value=True)
self._driver._get_gpfs_device = mock.Mock(return_value=self.fakedev)
self._driver._delete_share(self.share)
self._driver._gpfs_execute.assert_any_call(
'mmunlinkfileset', self.fakedev, self.share['name'],
'-f', ignore_exit_code=[2])
self.GPFS_PATH + 'mmunlinkfileset', self.fakedev,
self.share['name'], '-f', ignore_exit_code=[2])
self._driver._gpfs_execute.assert_any_call(
'mmdelfileset', self.fakedev, self.share['name'],
self.GPFS_PATH + 'mmdelfileset', self.fakedev, self.share['name'],
'-f', ignore_exit_code=[2])
self._driver._get_gpfs_device.assert_called_once_with()
@ -683,16 +678,16 @@ mmcesnfslsexport:nfsexports:HEADER:version:reserved:reserved:Path:Delegations:Cl
self._driver._delete_share, self.share)
self._driver._get_gpfs_device.assert_called_once_with()
self._driver._gpfs_execute.assert_called_once_with(
'mmunlinkfileset', self.fakedev, self.share['name'],
'-f', ignore_exit_code=[2])
self.GPFS_PATH + 'mmunlinkfileset', self.fakedev,
self.share['name'], '-f', ignore_exit_code=[2])
def test__create_share_snapshot(self):
self._driver._gpfs_execute = mock.Mock(return_value=True)
self._driver._get_gpfs_device = mock.Mock(return_value=self.fakedev)
self._driver._create_share_snapshot(self.snapshot)
self._driver._gpfs_execute.assert_called_once_with(
'mmcrsnapshot', self.fakedev, self.snapshot['name'],
'-j', self.snapshot['share_name']
self.GPFS_PATH + 'mmcrsnapshot', self.fakedev,
self.snapshot['name'], '-j', self.snapshot['share_name']
)
self._driver._get_gpfs_device.assert_called_once_with()
@ -705,8 +700,8 @@ mmcesnfslsexport:nfsexports:HEADER:version:reserved:reserved:Path:Delegations:Cl
self._driver._create_share_snapshot, self.snapshot)
self._driver._get_gpfs_device.assert_called_once_with()
self._driver._gpfs_execute.assert_called_once_with(
'mmcrsnapshot', self.fakedev, self.snapshot['name'],
'-j', self.snapshot['share_name']
self.GPFS_PATH + 'mmcrsnapshot', self.fakedev,
self.snapshot['name'], '-j', self.snapshot['share_name']
)
def test__create_share_from_snapshot(self):
@ -746,7 +741,8 @@ mmcesnfslsexport:nfsexports:HEADER:version:reserved:reserved:Path:Delegations:Cl
result = self._driver._is_share_valid(self.fakedev, self.fakesharepath)
self._driver._gpfs_execute.assert_called_once_with(
'mmlsfileset', self.fakedev, '-J', self.fakesharepath, '-L', '-Y')
self.GPFS_PATH + 'mmlsfileset', self.fakedev, '-J',
self.fakesharepath, '-L', '-Y')
if fakeout == "mmlsfileset::allocInodes:\nmmlsfileset::100096:":
self.assertTrue(result)
else:
@ -761,7 +757,8 @@ mmcesnfslsexport:nfsexports:HEADER:version:reserved:reserved:Path:Delegations:Cl
self.fakesharepath)
self._driver._gpfs_execute.assert_called_once_with(
'mmlsfileset', self.fakedev, '-J', self.fakesharepath, '-L', '-Y')
self.GPFS_PATH + 'mmlsfileset', self.fakedev, '-J',
self.fakesharepath, '-L', '-Y')
def test__is_share_valid_no_share_exist_exception(self):
fakeout = "mmlsfileset::allocInodes:"
@ -772,7 +769,8 @@ mmcesnfslsexport:nfsexports:HEADER:version:reserved:reserved:Path:Delegations:Cl
self.fakesharepath)
self._driver._gpfs_execute.assert_called_once_with(
'mmlsfileset', self.fakedev, '-J', self.fakesharepath, '-L', '-Y')
self.GPFS_PATH + 'mmlsfileset', self.fakedev, '-J',
self.fakesharepath, '-L', '-Y')
def test__get_share_name(self):
fakeout = "mmlsfileset::filesetName:\nmmlsfileset::existingshare:"
@ -791,7 +789,8 @@ mmcesnfslsexport:nfsexports:HEADER:version:reserved:reserved:Path:Delegations:Cl
self.fakesharepath)
self._driver._gpfs_execute.assert_called_once_with(
'mmlsfileset', self.fakedev, '-J', self.fakesharepath, '-L', '-Y')
self.GPFS_PATH + 'mmlsfileset', self.fakedev, '-J',
self.fakesharepath, '-L', '-Y')
def test__get_share_name_no_share_exist_exception(self):
fakeout = "mmlsfileset::filesetName:"
@ -802,7 +801,8 @@ mmcesnfslsexport:nfsexports:HEADER:version:reserved:reserved:Path:Delegations:Cl
self.fakesharepath)
self._driver._gpfs_execute.assert_called_once_with(
'mmlsfileset', self.fakedev, '-J', self.fakesharepath, '-L', '-Y')
self.GPFS_PATH + 'mmlsfileset', self.fakedev, '-J',
self.fakesharepath, '-L', '-Y')
@ddt.data("mmlsquota::blockLimit:\nmmlsquota::1048577",
"mmlsquota::blockLimit:\nmmlsquota::1048576",
@ -815,35 +815,27 @@ mmcesnfslsexport:nfsexports:HEADER:version:reserved:reserved:Path:Delegations:Cl
actual_size, actual_path = self._driver._manage_existing(
self.fakedev, self.share, self.fakeexistingshare)
self._driver._gpfs_execute.assert_any_call('mmunlinkfileset',
self.fakedev,
self.fakeexistingshare,
'-f')
self._driver._gpfs_execute.assert_any_call('mmchfileset',
self.fakedev,
self.fakeexistingshare,
'-j', self.share['name'])
self._driver._gpfs_execute.assert_any_call('mmlinkfileset',
self.fakedev,
self.share['name'],
'-J', self.fakesharepath)
self._driver._gpfs_execute.assert_any_call('chmod',
'777',
self.fakesharepath)
self._driver._gpfs_execute.assert_any_call(
self.GPFS_PATH + 'mmunlinkfileset', self.fakedev,
self.fakeexistingshare, '-f')
self._driver._gpfs_execute.assert_any_call(
self.GPFS_PATH + 'mmchfileset', self.fakedev,
self.fakeexistingshare, '-j', self.share['name'])
self._driver._gpfs_execute.assert_any_call(
self.GPFS_PATH + 'mmlinkfileset', self.fakedev, self.share['name'],
'-J', self.fakesharepath)
self._driver._gpfs_execute.assert_any_call(
'chmod', '777', self.fakesharepath)
if fakeout == "mmlsquota::blockLimit:\nmmlsquota::1048577":
self._driver._gpfs_execute.assert_called_with('mmsetquota',
self.fakedev + ':' +
self.share['name'],
'--block',
'0:2G')
self._driver._gpfs_execute.assert_called_with(
self.GPFS_PATH + 'mmsetquota', self.fakedev + ':' +
self.share['name'], '--block', '0:2G')
self.assertEqual(2, actual_size)
self.assertEqual('fakelocation', actual_path)
elif fakeout == "mmlsquota::blockLimit:\nmmlsquota::0":
self._driver._gpfs_execute.assert_called_with('mmsetquota',
self.fakedev + ':' +
self.share['name'],
'--block',
'0:1G')
self._driver._gpfs_execute.assert_called_with(
self.GPFS_PATH + 'mmsetquota', self.fakedev + ':' +
self.share['name'], '--block', '0:1G')
self.assertEqual(1, actual_size)
self.assertEqual('fakelocation', actual_path)
else:
@ -861,7 +853,8 @@ mmcesnfslsexport:nfsexports:HEADER:version:reserved:reserved:Path:Delegations:Cl
self._driver._local_path.assert_called_once_with(self.share['name'])
self._driver._gpfs_execute.assert_called_once_with(
'mmunlinkfileset', self.fakedev, self.fakeexistingshare, '-f')
self.GPFS_PATH + 'mmunlinkfileset', self.fakedev,
self.fakeexistingshare, '-f')
def test__manage_existing_fileset_creation_exception(self):
self._driver._local_path = mock.Mock(return_value=self.fakesharepath)
@ -874,10 +867,10 @@ mmcesnfslsexport:nfsexports:HEADER:version:reserved:reserved:Path:Delegations:Cl
self._driver._local_path.assert_any_call(self.share['name'])
self._driver._gpfs_execute.assert_has_calls([
mock.call('mmunlinkfileset', self.fakedev, self.fakeexistingshare,
'-f'),
mock.call('mmchfileset', self.fakedev, self.fakeexistingshare,
'-j', self.share['name'])])
mock.call(self.GPFS_PATH + 'mmunlinkfileset', self.fakedev,
self.fakeexistingshare, '-f'),
mock.call(self.GPFS_PATH + 'mmchfileset', self.fakedev,
self.fakeexistingshare, '-j', self.share['name'])])
def test__manage_existing_fileset_relink_exception(self):
self._driver._local_path = mock.Mock(return_value=self.fakesharepath)
@ -890,12 +883,12 @@ mmcesnfslsexport:nfsexports:HEADER:version:reserved:reserved:Path:Delegations:Cl
self._driver._local_path.assert_any_call(self.share['name'])
self._driver._gpfs_execute.assert_has_calls([
mock.call('mmunlinkfileset', self.fakedev, self.fakeexistingshare,
'-f'),
mock.call('mmchfileset', self.fakedev, self.fakeexistingshare,
'-j', self.share['name']),
mock.call('mmlinkfileset', self.fakedev, self.share['name'], '-J',
self.fakesharepath)])
mock.call(self.GPFS_PATH + 'mmunlinkfileset', self.fakedev,
self.fakeexistingshare, '-f'),
mock.call(self.GPFS_PATH + 'mmchfileset', self.fakedev,
self.fakeexistingshare, '-j', self.share['name']),
mock.call(self.GPFS_PATH + 'mmlinkfileset', self.fakedev,
self.share['name'], '-J', self.fakesharepath)])
def test__manage_existing_permission_change_exception(self):
self._driver._local_path = mock.Mock(return_value=self.fakesharepath)
@ -908,12 +901,12 @@ mmcesnfslsexport:nfsexports:HEADER:version:reserved:reserved:Path:Delegations:Cl
self._driver._local_path.assert_any_call(self.share['name'])
self._driver._gpfs_execute.assert_has_calls([
mock.call('mmunlinkfileset', self.fakedev, self.fakeexistingshare,
'-f'),
mock.call('mmchfileset', self.fakedev, self.fakeexistingshare,
'-j', self.share['name']),
mock.call('mmlinkfileset', self.fakedev, self.share['name'], '-J',
self.fakesharepath),
mock.call(self.GPFS_PATH + 'mmunlinkfileset', self.fakedev,
self.fakeexistingshare, '-f'),
mock.call(self.GPFS_PATH + 'mmchfileset', self.fakedev,
self.fakeexistingshare, '-j', self.share['name']),
mock.call(self.GPFS_PATH + 'mmlinkfileset', self.fakedev,
self.share['name'], '-J', self.fakesharepath),
mock.call('chmod', '777', self.fakesharepath)])
def test__manage_existing_checking_quota_of_fileset_exception(self):
@ -927,15 +920,15 @@ mmcesnfslsexport:nfsexports:HEADER:version:reserved:reserved:Path:Delegations:Cl
self._driver._local_path.assert_any_call(self.share['name'])
self._driver._gpfs_execute.assert_has_calls([
mock.call('mmunlinkfileset', self.fakedev, self.fakeexistingshare,
'-f'),
mock.call('mmchfileset', self.fakedev, self.fakeexistingshare,
'-j', self.share['name']),
mock.call('mmlinkfileset', self.fakedev, self.share['name'], '-J',
self.fakesharepath),
mock.call(self.GPFS_PATH + 'mmunlinkfileset', self.fakedev,
self.fakeexistingshare, '-f'),
mock.call(self.GPFS_PATH + 'mmchfileset', self.fakedev,
self.fakeexistingshare, '-j', self.share['name']),
mock.call(self.GPFS_PATH + 'mmlinkfileset', self.fakedev,
self.share['name'], '-J', self.fakesharepath),
mock.call('chmod', '777', self.fakesharepath),
mock.call('mmlsquota', '-j', self.share['name'], '-Y',
self.fakedev)])
mock.call(self.GPFS_PATH + 'mmlsquota', '-j', self.share['name'],
'-Y', self.fakedev)])
def test__manage_existing_unable_to_get_quota_of_fileset_exception(self):
fakeout = "mmlsquota::blockLimit:"
@ -947,23 +940,20 @@ mmcesnfslsexport:nfsexports:HEADER:version:reserved:reserved:Path:Delegations:Cl
self.share, self.fakeexistingshare)
self._driver._local_path.assert_any_call(self.share['name'])
self._driver._gpfs_execute.assert_any_call('mmunlinkfileset',
self.fakedev,
self.fakeexistingshare,
'-f')
self._driver._gpfs_execute.assert_any_call('mmchfileset',
self.fakedev,
self.fakeexistingshare,
'-j', self.share['name'])
self._driver._gpfs_execute.assert_any_call('mmlinkfileset',
self.fakedev,
self.share['name'],
'-J', self.fakesharepath)
self._driver._gpfs_execute.assert_any_call('chmod',
'777',
self.fakesharepath)
self._driver._gpfs_execute.assert_any_call(
self.GPFS_PATH + 'mmunlinkfileset', self.fakedev,
self.fakeexistingshare, '-f')
self._driver._gpfs_execute.assert_any_call(
self.GPFS_PATH + 'mmchfileset', self.fakedev,
self.fakeexistingshare, '-j', self.share['name'])
self._driver._gpfs_execute.assert_any_call(
self.GPFS_PATH + 'mmlinkfileset', self.fakedev,
self.share['name'], '-J', self.fakesharepath)
self._driver._gpfs_execute.assert_any_call(
'chmod', '777', self.fakesharepath)
self._driver._gpfs_execute.assert_called_with(
'mmlsquota', '-j', self.share['name'], '-Y', self.fakedev)
self.GPFS_PATH + 'mmlsquota', '-j', self.share['name'],
'-Y', self.fakedev)
def test__manage_existing_set_quota_of_fileset_less_than_1G_exception(
self):
@ -980,17 +970,17 @@ mmcesnfslsexport:nfsexports:HEADER:version:reserved:reserved:Path:Delegations:Cl
self._driver._local_path.assert_any_call(self.share['name'])
self._driver._gpfs_execute.assert_has_calls([
mock.call('mmunlinkfileset', self.fakedev, self.fakeexistingshare,
'-f'),
mock.call('mmchfileset', self.fakedev, self.fakeexistingshare,
'-j', self.share['name']),
mock.call('mmlinkfileset', self.fakedev, self.share['name'], '-J',
self.fakesharepath),
mock.call(self.GPFS_PATH + 'mmunlinkfileset', self.fakedev,
self.fakeexistingshare, '-f'),
mock.call(self.GPFS_PATH + 'mmchfileset', self.fakedev,
self.fakeexistingshare, '-j', self.share['name']),
mock.call(self.GPFS_PATH + 'mmlinkfileset', self.fakedev,
self.share['name'], '-J', self.fakesharepath),
mock.call('chmod', '777', self.fakesharepath),
mock.call('mmlsquota', '-j', self.share['name'], '-Y',
self.fakedev),
mock.call('mmsetquota', self.fakedev + ':' + self.share['name'],
'--block', '0:' + sizestr)])
mock.call(self.GPFS_PATH + 'mmlsquota', '-j', self.share['name'],
'-Y', self.fakedev),
mock.call(self.GPFS_PATH + 'mmsetquota', self.fakedev + ':' +
self.share['name'], '--block', '0:' + sizestr)])
def test__manage_existing_set_quota_of_fileset_grater_than_1G_exception(
self):
@ -1007,17 +997,17 @@ mmcesnfslsexport:nfsexports:HEADER:version:reserved:reserved:Path:Delegations:Cl
self._driver._local_path.assert_any_call(self.share['name'])
self._driver._gpfs_execute.assert_has_calls([
mock.call('mmunlinkfileset', self.fakedev, self.fakeexistingshare,
'-f'),
mock.call('mmchfileset', self.fakedev, self.fakeexistingshare,
'-j', self.share['name']),
mock.call('mmlinkfileset', self.fakedev, self.share['name'], '-J',
self.fakesharepath),
mock.call(self.GPFS_PATH + 'mmunlinkfileset', self.fakedev,
self.fakeexistingshare, '-f'),
mock.call(self.GPFS_PATH + 'mmchfileset', self.fakedev,
self.fakeexistingshare, '-j', self.share['name']),
mock.call(self.GPFS_PATH + 'mmlinkfileset', self.fakedev,
self.share['name'], '-J', self.fakesharepath),
mock.call('chmod', '777', self.fakesharepath),
mock.call('mmlsquota', '-j', self.share['name'], '-Y',
self.fakedev),
mock.call('mmsetquota', self.fakedev + ':' + self.share['name'],
'--block', '0:' + sizestr)])
mock.call(self.GPFS_PATH + 'mmlsquota', '-j', self.share['name'],
'-Y', self.fakedev),
mock.call(self.GPFS_PATH + 'mmsetquota', self.fakedev + ':' +
self.share['name'], '--block', '0:' + sizestr)])
def test_manage_existing(self):
self._driver._manage_existing = mock.Mock(return_value=('1',
@ -1417,7 +1407,7 @@ mmcesnfslsexport:nfsexports:HEADER:version:reserved:reserved:Path:Delegations:Cl
local_path)
self._ces_helper._execute.assert_called_once_with(
'mmnfs', 'export', 'list', '-n', local_path, '-Y')
self.GPFS_PATH + 'mmnfs', 'export', 'list', '-n', local_path, '-Y')
@ddt.data('44.3.2.11', '1:2:3:4:5:6:7:8')
def test__fix_export_data(self, ip):
@ -1456,7 +1446,7 @@ mmcesnfslsexport:nfsexports:HEADER:version:reserved:reserved:Path:Delegations:Cl
self._ces_helper._has_client_access(local_path, ip))
self._ces_helper._execute.assert_called_once_with(
'mmnfs', 'export', 'list', '-n', local_path, '-Y')
self.GPFS_PATH + 'mmnfs', 'export', 'list', '-n', local_path, '-Y')
def test_ces_remove_export_no_exports(self):
mock_out = self.fake_ces_exports_not_found
@ -1467,7 +1457,7 @@ mmcesnfslsexport:nfsexports:HEADER:version:reserved:reserved:Path:Delegations:Cl
self._ces_helper.remove_export(local_path, self.share)
self._ces_helper._execute.assert_called_once_with(
'mmnfs', 'export', 'list', '-n', local_path, '-Y')
self.GPFS_PATH + 'mmnfs', 'export', 'list', '-n', local_path, '-Y')
def test_ces_remove_export_existing_exports(self):
mock_out = self.fake_ces_exports
@ -1478,8 +1468,10 @@ mmcesnfslsexport:nfsexports:HEADER:version:reserved:reserved:Path:Delegations:Cl
self._ces_helper.remove_export(local_path, self.share)
self._ces_helper._execute.assert_has_calls([
mock.call('mmnfs', 'export', 'list', '-n', local_path, '-Y'),
mock.call('mmnfs', 'export', 'remove', local_path),
mock.call(self.GPFS_PATH + 'mmnfs', 'export', 'list', '-n',
local_path, '-Y'),
mock.call(self.GPFS_PATH + 'mmnfs', 'export', 'remove',
local_path),
])
def test_ces_remove_export_exception(self):
@ -1505,9 +1497,10 @@ mmcesnfslsexport:nfsexports:HEADER:version:reserved:reserved:Path:Delegations:Cl
self._ces_helper.allow_access(local_path, self.share, access)
self._ces_helper._execute.assert_has_calls([
mock.call('mmnfs', 'export', 'list', '-n', local_path, '-Y'),
mock.call('mmnfs', 'export', 'add', local_path, '-c',
access['access_to'] + '(' + export_opts + ')')])
mock.call(self.GPFS_PATH + 'mmnfs', 'export', 'list', '-n',
local_path, '-Y'),
mock.call(self.GPFS_PATH + 'mmnfs', 'export', 'add', local_path,
'-c', access['access_to'] + '(' + export_opts + ')')])
def test_ces_allow_access_existing_exports(self):
mock_out = self.fake_ces_exports
@ -1525,9 +1518,11 @@ mmcesnfslsexport:nfsexports:HEADER:version:reserved:reserved:Path:Delegations:Cl
self.access)
self._ces_helper._execute.assert_has_calls([
mock.call('mmnfs', 'export', 'list', '-n', local_path, '-Y'),
mock.call('mmnfs', 'export', 'change', local_path, '--nfsadd',
access['access_to'] + '(' + export_opts + ')')])
mock.call(self.GPFS_PATH + 'mmnfs', 'export', 'list', '-n',
local_path, '-Y'),
mock.call(self.GPFS_PATH + 'mmnfs', 'export', 'change', local_path,
'--nfsadd', access['access_to'] + '(' +
export_opts + ')')])
def test_ces_allow_access_invalid_access_type(self):
access = fake_share.fake_access(access_type='test')
@ -1556,9 +1551,10 @@ mmcesnfslsexport:nfsexports:HEADER:version:reserved:reserved:Path:Delegations:Cl
self._ces_helper.deny_access(local_path, self.share, access)
self._ces_helper._execute.assert_has_calls([
mock.call('mmnfs', 'export', 'list', '-n', local_path, '-Y'),
mock.call('mmnfs', 'export', 'change', local_path, '--nfsremove',
access['access_to'])])
mock.call(self.GPFS_PATH + 'mmnfs', 'export', 'list', '-n',
local_path, '-Y'),
mock.call(self.GPFS_PATH + 'mmnfs', 'export', 'change', local_path,
'--nfsremove', access['access_to'])])
def test_ces_deny_access_exception(self):
access = self.access
@ -1580,9 +1576,11 @@ mmcesnfslsexport:nfsexports:HEADER:version:reserved:reserved:Path:Delegations:Cl
self._ces_helper.resync_access(local_path, self.share, access_rules)
self._ces_helper._execute.assert_has_calls([
mock.call('mmnfs', 'export', 'list', '-n', local_path, '-Y'),
mock.call('mmnfs', 'export', 'add', local_path, '-c',
self.access['access_to'] + '(' + "access_type=rw" + ')')
mock.call(self.GPFS_PATH + 'mmnfs', 'export', 'list', '-n',
local_path, '-Y'),
mock.call(self.GPFS_PATH + 'mmnfs', 'export', 'add', local_path,
'-c', self.access['access_to'] + '(' + "access_type=rw" +
')')
])
share_types.get_extra_specs_from_share.assert_called_once_with(
self.share)
@ -1618,8 +1616,9 @@ mmcesnfslsexport:nfsexports:HEADER:version:reserved:reserved:Path:Delegations:Cl
to_add = access_rules[0]['access_to'] + '(' + "access_type=rw" + ')'
to_change = access_rules[1]['access_to'] + '(' + "access_type=ro" + ')'
self._ces_helper._execute.assert_has_calls([
mock.call('mmnfs', 'export', 'list', '-n', local_path, '-Y'),
mock.call('mmnfs', 'export', 'change', local_path,
mock.call(self.GPFS_PATH + 'mmnfs', 'export', 'list', '-n',
local_path, '-Y'),
mock.call(self.GPFS_PATH + 'mmnfs', 'export', 'change', local_path,
'--nfsremove', SortedMatch(self.assertEqual, to_remove),
'--nfsadd', to_add,
'--nfschange', to_change)
@ -1634,4 +1633,4 @@ mmcesnfslsexport:nfsexports:HEADER:version:reserved:reserved:Path:Delegations:Cl
self._ces_helper.resync_access(local_path, None, [])
self._ces_helper._execute.assert_called_once_with(
'mmnfs', 'export', 'list', '-n', local_path, '-Y')
self.GPFS_PATH + 'mmnfs', 'export', 'list', '-n', local_path, '-Y')

View File

@ -0,0 +1,3 @@
---
fixes:
- Fixed the prerequisite of GPFS path export needed for initializing driver.