Fix Manila HNAS driver managing a share twice
Manila HNAS driver splits the path to manage a share by ':', so when passing a path with two colons the last part is ignored, it causes the possibility to manage a share twice. For example: manila manage --name test1 --share-type hds ubuntu@hnas#Hitachi nfs 172.24.49.26:/shares/f5b21612-9841-42c8-bec4-ca32ba70a9ae and manila manage --name test2 --share-type hds ubuntu@hnas#Hitachi nfs 172.24.49.26:/shares/f5b21612-9841-42c8-bec4-ca32ba70a9ae:1 Changing the split to search for ':/shares/' prevents a share to be managed twice. Change-Id: Ie97f749d7093db69a757db7c04041f6f649c7ce9 Closes-Bug: #1613683
This commit is contained in:
parent
06eabef61d
commit
12f95b1373
@ -481,12 +481,12 @@ class HitachiHNASDriver(driver.ShareDriver):
|
|||||||
{'shr_path': share['export_locations'][0]['path'],
|
{'shr_path': share['export_locations'][0]['path'],
|
||||||
'shr_id': share['id']})
|
'shr_id': share['id']})
|
||||||
|
|
||||||
old_path_info = share['export_locations'][0]['path'].split(':')
|
old_path_info = share['export_locations'][0]['path'].split(
|
||||||
old_path = old_path_info[1].split('/')
|
':/shares/')
|
||||||
|
|
||||||
if len(old_path) == 3:
|
if len(old_path_info) == 2:
|
||||||
evs_ip = old_path_info[0]
|
evs_ip = old_path_info[0]
|
||||||
hnas_share_id = old_path[2]
|
hnas_share_id = old_path_info[1]
|
||||||
else:
|
else:
|
||||||
msg = _("Incorrect path. It should have the following format: "
|
msg = _("Incorrect path. It should have the following format: "
|
||||||
"IP:/shares/share_id.")
|
"IP:/shares/share_id.")
|
||||||
|
@ -596,14 +596,19 @@ class HitachiHNASTestCase(test.TestCase):
|
|||||||
self.assertRaises(exception.HNASBackendException,
|
self.assertRaises(exception.HNASBackendException,
|
||||||
self._driver.manage_existing, share_nfs, 'option')
|
self._driver.manage_existing, share_nfs, 'option')
|
||||||
|
|
||||||
@ddt.data(share_nfs, share_cifs)
|
@ddt.data(':/', '1.1.1.1:/share_id', '1.1.1.1:/shares',
|
||||||
def test_manage_existing_wrong_path_format(self, share):
|
'1.1.1.1:shares/share_id', ':/share_id')
|
||||||
share_copy = share.copy()
|
def test_manage_existing_wrong_path_format(self, wrong_location):
|
||||||
share_copy['export_locations'] = [{'path': ':/'}]
|
expected_exception = ("Share backend error: Incorrect path. It "
|
||||||
|
"should have the following format: "
|
||||||
|
"IP:/shares/share_id.")
|
||||||
|
share_copy = share_nfs.copy()
|
||||||
|
share_copy['export_locations'] = [{'path': wrong_location}]
|
||||||
|
|
||||||
self.assertRaises(exception.ShareBackendException,
|
ex = self.assertRaises(exception.ShareBackendException,
|
||||||
self._driver.manage_existing, share_copy,
|
self._driver.manage_existing, share_copy,
|
||||||
'option')
|
'option')
|
||||||
|
self.assertEqual(expected_exception, ex.msg)
|
||||||
|
|
||||||
def test_manage_existing_wrong_evs_ip(self):
|
def test_manage_existing_wrong_evs_ip(self):
|
||||||
share_nfs['export_locations'] = [{'path': '172.24.44.189:/shares/'
|
share_nfs['export_locations'] = [{'path': '172.24.44.189:/shares/'
|
||||||
|
@ -0,0 +1,4 @@
|
|||||||
|
---
|
||||||
|
fixes:
|
||||||
|
- Fixed Hitachi HNAS driver allowing a share to be managed twice through
|
||||||
|
a malformed export location parameter.
|
Loading…
Reference in New Issue
Block a user