File 0002-Fix-Remove-VxFlex-OS-credentials-regression.patch of Package python-os-brick
From 867767ffdae124fcdb9b04a9089e226689c476d7 Mon Sep 17 00:00:00 2001
From: hamalq <hamalq@verizonmedia.com>
Date: Tue, 16 Jun 2020 17:59:07 +0000
Subject: [PATCH 2/2] Fix "Remove VxFlex OS credentials" regression
Change I10a8aaddbf7dd09830cd4189cd1f99c0ad1f3b60 uses a ConfigParser
instance in a way that is incompatible with python 2.7, resulting in
a "ConfigParser instance has no attribute '__getitem__'" error. This
patch accesses the ConfigParser using the "old" API that works in both
Python 2.7 and Python 3 and adds some tests.
Co-authored-by: Brian Rosmaita <rosmaita.fossdev@gmail.com>
Change-Id: Ie2db587c3bc379acd53cfd449788d171ae58dec5
Closes-Bug: 1883654
(cherry picked from commit 12d252db9cb9deffea3c87b86ea71b3013d93892)
(cherry picked from commit 750999db0de0fcfc923cd453add808ca42a4e2b4)
Conflicts:
- remove os_brick/privileged/scaleio.py (function with bug is in the
connector in this branch)
- move the test file to tests/initiator/connectors/
- modify the unit tests because the config file is accessed differently
in this branch
---
os_brick/initiator/connectors/scaleio.py | 2 +-
.../connectors/test_scaleio_get_password.py | 62 +++++++++++++++++++
.../notes/bug-1883654-cc069892496bd4a8.yaml | 28 +++++++++
3 files changed, 91 insertions(+), 1 deletion(-)
create mode 100644 os_brick/tests/initiator/connectors/test_scaleio_get_password.py
create mode 100644 releasenotes/notes/bug-1883654-cc069892496bd4a8.yaml
diff --git a/os_brick/initiator/connectors/scaleio.py b/os_brick/initiator/connectors/scaleio.py
index b420eaa..f278a56 100644
--- a/os_brick/initiator/connectors/scaleio.py
+++ b/os_brick/initiator/connectors/scaleio.py
@@ -240,7 +240,7 @@ class ScaleIOConnector(base.BaseLinuxConnector):
root_helper=self._root_helper)
conf = configparser.ConfigParser()
conf.readfp(six.StringIO(out))
- return conf[config_group]["san_password"]
+ return conf.get(config_group, "san_password")
except putils.ProcessExecutionError as e:
msg = _("Error reading ScaleIO connector "
"configuration file: %s") % e.stderr
diff --git a/os_brick/tests/initiator/connectors/test_scaleio_get_password.py b/os_brick/tests/initiator/connectors/test_scaleio_get_password.py
new file mode 100644
index 0000000..6d9aaa5
--- /dev/null
+++ b/os_brick/tests/initiator/connectors/test_scaleio_get_password.py
@@ -0,0 +1,62 @@
+# Copyright 2020, Red Hat Inc.
+#
+# Licensed under the Apache License, Version 2.0 (the "License"); you may
+# not use this file except in compliance with the License. You may obtain
+# a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+# License for the specific language governing permissions and limitations
+# under the License.
+
+import mock
+import os
+
+from os_brick import exception
+from os_brick.initiator.connectors import scaleio
+from os_brick.tests import base
+
+EXPECTED_SECTION = "scalio_test"
+EXPECTED_PASSWORD = "This is not a good password"
+FAKE_CONF = """
+[DEFAULT]
+san_password = not me
+
+[{}]
+san_password = {}
+
+[section_2]
+san_password = not me either
+""".format(EXPECTED_SECTION, EXPECTED_PASSWORD)
+
+
+class ScaleioGetPasswordTestCase(base.TestCase):
+ """Check the get_connector_password function.
+
+ Launchpad bug #1883654: a change that worked fine in the
+ python 3-only branches broke when run under py2.7 in the stable
+ branches.
+
+ """
+
+ def setUp(self):
+ super(ScaleioGetPasswordTestCase, self).setUp()
+ # The actual ScaleIO connector
+ self.connector = scaleio.ScaleIOConnector('sudo')
+
+ @mock.patch.object(os.path, 'isfile', return_value=False)
+ def test_get_connector_password_bad_filename(self, mock_isfile):
+ self.assertRaises(exception.BrickException,
+ self.connector._get_connector_password,
+ EXPECTED_SECTION)
+
+ @mock.patch.object(scaleio.ScaleIOConnector, '_execute')
+ @mock.patch.object(os.path, 'isfile', return_value=True)
+ def test_get_connector_password(self, mock_isfile, mock_execute):
+ mock_execute.return_value = (FAKE_CONF, 0)
+ found_password = self.connector._get_connector_password(
+ EXPECTED_SECTION)
+ self.assertEqual(EXPECTED_PASSWORD, found_password)
diff --git a/releasenotes/notes/bug-1883654-cc069892496bd4a8.yaml b/releasenotes/notes/bug-1883654-cc069892496bd4a8.yaml
new file mode 100644
index 0000000..a183a1c
--- /dev/null
+++ b/releasenotes/notes/bug-1883654-cc069892496bd4a8.yaml
@@ -0,0 +1,28 @@
+---
+security:
+ - |
+ Dell EMC VxFlex OS driver: This release corrects an issue where the
+ fix for `Bug #1823200 <https://bugs.launchpad.net/cinder/+bug/1823200>`_
+ did not run correctly when using Python 2.7. If you are interested
+ in this release because of `OSSN-0086
+ <https://wiki.openstack.org/wiki/OSSN/OSSN-0086>`_, be aware that
+ you must also deploy a configuration file on compute nodes, cinder
+ nodes, and anywhere you would perform a volume attachment in your
+ deployment. Please see the release notes for the previous release
+ for details.
+upgrade:
+ - |
+ This release corrects a problem with the fix for `Bug #1823200
+ <https://bugs.launchpad.net/cinder/+bug/1823200>`_ in the previous
+ release. If you are running OpenStack on Python 3, you should not
+ be impacted by this bug. If you are not using Dell EMC VxFlex OS
+ (ScaleIO) Storage as a backend for Cinder, you do not need to upgrade
+ to this release.
+fixes:
+ - |
+ `Bug #1883654 <https://bugs.launchpad.net/os-brick/+bug/1883654>`_:
+ The fix for `Bug #1823200
+ <https://bugs.launchpad.net/cinder/+bug/1823200>`_ in the previous
+ release used a Python 3-specific language feature and thus did not
+ run correctly when used with Python 2.7. The problem has been corrected
+ in this release.
--
2.27.0