From 79bf9310ffdc8b43fa015a620af8d35bad12a546 Mon Sep 17 00:00:00 2001 From: Peter Wang Date: Fri, 5 May 2017 17:50:26 +0800 Subject: [PATCH] Fix permission error in VNX driver VNX driver should use the `state_path` instead of home of current user, or we may meet permission error when creating folder for storing data. Change-Id: I7ff6ae1bc0cd0102c6c22537f4fadacf3697a8be Closes-bug: #1688477 --- .../volume/drivers/dell_emc/vnx/mocked_vnx.yaml | 2 ++ .../volume/drivers/dell_emc/vnx/test_adapter.py | 13 +++++++++++++ cinder/volume/drivers/dell_emc/vnx/adapter.py | 6 +++++- 3 files changed, 20 insertions(+), 1 deletion(-) diff --git a/cinder/tests/unit/volume/drivers/dell_emc/vnx/mocked_vnx.yaml b/cinder/tests/unit/volume/drivers/dell_emc/vnx/mocked_vnx.yaml index 183815c6a16..c0572051976 100644 --- a/cinder/tests/unit/volume/drivers/dell_emc/vnx/mocked_vnx.yaml +++ b/cinder/tests/unit/volume/drivers/dell_emc/vnx/mocked_vnx.yaml @@ -1775,6 +1775,8 @@ test_get_pool_name: test_normalize_config_naviseccli_path: +test_normalize_config_queue_path: + test_normalize_config_naviseccli_path_none: test_normalize_config_pool_names: diff --git a/cinder/tests/unit/volume/drivers/dell_emc/vnx/test_adapter.py b/cinder/tests/unit/volume/drivers/dell_emc/vnx/test_adapter.py index 10f2fd8a3fd..297f02fad2b 100644 --- a/cinder/tests/unit/volume/drivers/dell_emc/vnx/test_adapter.py +++ b/cinder/tests/unit/volume/drivers/dell_emc/vnx/test_adapter.py @@ -13,8 +13,11 @@ # License for the specific language governing permissions and limitations # under the License. import mock +import os import re +from oslo_config import cfg + from cinder import context from cinder import exception from cinder.objects import fields @@ -42,6 +45,7 @@ class TestCommonAdapter(test.TestCase): vnx_utils.init_ops(self.configuration) self.configuration.san_ip = '192.168.1.1' self.configuration.storage_vnx_authentication_type = 'global' + self.configuration.config_group = 'vnx_backend' self.ctxt = context.get_admin_context() def tearDown(self): @@ -1241,6 +1245,15 @@ class TestCommonAdapter(test.TestCase): data['provider_location']) self.assertEqual('True', data['metadata']['snapcopy']) + @res_mock.patch_common_adapter + def test_normalize_config_queue_path(self, common_adapter, + mocked_res): + common_adapter._normalize_config() + self.assertEqual(os.path.join(cfg.CONF.state_path, + 'vnx', + 'vnx_backend'), + common_adapter.queue_path) + @res_mock.patch_common_adapter def test_normalize_config_naviseccli_path(self, common_adapter, mocked_res): diff --git a/cinder/volume/drivers/dell_emc/vnx/adapter.py b/cinder/volume/drivers/dell_emc/vnx/adapter.py index 310684a8d2e..baff3d500f3 100644 --- a/cinder/volume/drivers/dell_emc/vnx/adapter.py +++ b/cinder/volume/drivers/dell_emc/vnx/adapter.py @@ -15,9 +15,11 @@ import json import math +import os import random import re +from oslo_config import cfg from oslo_log import log as logging from oslo_utils import importutils import six @@ -36,6 +38,7 @@ from cinder.volume.drivers.dell_emc.vnx import utils from cinder.zonemanager import utils as zm_utils +CONF = cfg.CONF LOG = logging.getLogger(__name__) @@ -94,9 +97,10 @@ class CommonAdapter(object): self.set_extra_spec_defaults() def _normalize_config(self): - self.queue_path = ( + group_name = ( self.config.config_group if self.config.config_group else 'DEFAULT') + self.queue_path = os.path.join(CONF.state_path, 'vnx', group_name) # Check option `naviseccli_path`. # Set to None (then pass to storops) if it is not set or set to an # empty string.