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.

Conflicts:
        manila/share/drivers/hitachi/hds_hnas.py
        manila/tests/share/drivers/hitachi/hnas/test_driver.py

Change-Id: Ie97f749d7093db69a757db7c04041f6f649c7ce9
Closes-Bug: #1613683
(cherry picked from commit 12f95b1373)
This commit is contained in:
Alyson Rosa 2016-08-16 09:19:42 -03:00
parent bfff3a7b8d
commit c89d627e44
3 changed files with 21 additions and 9 deletions

View File

@ -389,12 +389,12 @@ class HDSHNASDriver(driver.ShareDriver):
{'shr_path': share['export_locations'][0]['path'],
'shr_id': share['id']})
old_path_info = share['export_locations'][0]['path'].split(':')
old_path = old_path_info[1].split('/')
old_path_info = share['export_locations'][0]['path'].split(
':/shares/')
if len(old_path) == 3:
if len(old_path_info) == 2:
evs_ip = old_path_info[0]
hnas_share_id = old_path[2]
hnas_share_id = old_path_info[1]
else:
msg = _("Incorrect path. It should have the following format: "
"IP:/shares/share_id.")

View File

@ -416,12 +416,20 @@ class HDSHNASTestCase(test.TestCase):
self.assertRaises(exception.HNASBackendException,
self._driver.manage_existing, share, 'option')
def test_manage_existing_wrong_path_format(self):
share['export_locations'] = [{'path': ':/'}]
@ddt.data(':/', '1.1.1.1:/share_id', '1.1.1.1:/shares',
'1.1.1.1:shares/share_id', ':/share_id')
def test_manage_existing_wrong_path_format(self, wrong_location):
expected_exception = ("Share backend error: Incorrect path. It "
"should have the following format: "
"IP:/shares/share_id.")
share_copy = share.copy()
share_copy['export_locations'] = [{'path': wrong_location}]
self.assertRaises(exception.ShareBackendException,
self._driver.manage_existing, share,
'option')
ex = self.assertRaises(exception.ShareBackendException,
self._driver.manage_existing, share_copy,
'option')
self.assertEqual(expected_exception, ex.msg)
def test_manage_existing_wrong_evs_ip(self):
share['export_locations'] = [{'path': '172.24.44.189:/shares/'

View File

@ -0,0 +1,4 @@
---
fixes:
- Fixed Hitachi HNAS driver allowing a share to be managed twice through
a malformed export location parameter.