Fix "Remove VxFlex OS credentials" regression

Change I89bd58d79e5cd74cf283d026ada486b7f7122980 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 12d252db9c)
This commit is contained in:
hamalq 2020-06-16 17:59:07 +00:00
parent b5891702cc
commit 750999db0d
3 changed files with 97 additions and 1 deletions

View File

@ -96,4 +96,4 @@ def get_connector_password(filename, config_group):
conf = configparser.ConfigParser()
conf.read(filename)
return conf[config_group]["san_password"]
return conf.get(config_group, "san_password")

View File

@ -0,0 +1,68 @@
# 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 tempfile
from os_brick import exception
from os_brick import privileged
from os_brick.privileged 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()
# Bypass privsep and run these simple functions in-process
# (allows reading back the modified state of mocks)
privileged.default.set_client_mode(False)
self.addCleanup(privileged.default.set_client_mode, True)
self.fake_config_file = tempfile.NamedTemporaryFile("w",
suffix='.conf')
self.addCleanup(self.fake_config_file.close)
self.fake_config_file.write(FAKE_CONF)
self.fake_config_file.flush()
def test_get_connector_password_bad_filename(self):
self.assertRaises(exception.BrickException,
scaleio.get_connector_password,
"this_is_not_the_file_you_expect.conf",
EXPECTED_SECTION)
def test_get_connector_password(self):
found_password = scaleio.get_connector_password(
self.fake_config_file.name, EXPECTED_SECTION)
self.assertEqual(EXPECTED_PASSWORD, found_password)

View File

@ -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.