From a250a41678dbb6bf31d333579476032eca2e855c Mon Sep 17 00:00:00 2001 From: Ian Wienand Date: Thu, 1 Aug 2019 10:22:44 +0200 Subject: [PATCH] Fix quoting for devstack_localrc arguments This is a combination of the following commits: - "Quote devstack_localrc arguments" https://review.opendev.org/636078 Ia63a53d745dfea7262bcdb5d46425f431c3ccfe5 - "Fix double quoting issue when writing localconf" https://review.opendev.org/648951 I92146e04731efc6dcc632ae6c3a7c374e783cdba They have been merged together because the first commit introduces a bug, and it looks a bit pointless to deliberately introduce a potentially breaking change on the process of backporting a fix. Co-Authored-By: Ian Wienand Co-Authored-By: Jens Harbott Change-Id: Ia703af54a7131843fc2b0ae34efcfe0f5507acbf (cherry picked from commit 2e1393621a4d4321e5437b63d6ac97011f089c45) --- .../library/devstack_local_conf.py | 6 ++++- .../write-devstack-local-conf/library/test.py | 22 +++++++++++++++++-- 2 files changed, 25 insertions(+), 3 deletions(-) diff --git a/roles/write-devstack-local-conf/library/devstack_local_conf.py b/roles/write-devstack-local-conf/library/devstack_local_conf.py index 8df8dea6dd..2f97d0e355 100644 --- a/roles/write-devstack-local-conf/library/devstack_local_conf.py +++ b/roles/write-devstack-local-conf/library/devstack_local_conf.py @@ -252,7 +252,11 @@ class LocalConf(object): if localrc: vg = VarGraph(localrc) for k, v in vg.getVars(): - self.localrc.append('{}={}'.format(k, v)) + # Avoid double quoting + if len(v) and v[0]=='"': + self.localrc.append('{}={}'.format(k, v)) + else: + self.localrc.append('{}="{}"'.format(k, v)) if k == 'LIBS_FROM_GIT': lfg = True elif k == 'TEMPEST_PLUGINS': diff --git a/roles/write-devstack-local-conf/library/test.py b/roles/write-devstack-local-conf/library/test.py index 2900949105..7c526b34c8 100644 --- a/roles/write-devstack-local-conf/library/test.py +++ b/roles/write-devstack-local-conf/library/test.py @@ -185,7 +185,25 @@ class TestDevstackLocalConf(unittest.TestCase): for line in f: if line.startswith('LIBS_FROM_GIT'): lfg = line.strip().split('=')[1] - self.assertEqual('oslo.db', lfg) + self.assertEqual('"oslo.db"', lfg) + + def test_avoid_double_quote(self): + "Test that there a no duplicated quotes" + localrc = {'TESTVAR': '"quoted value"'} + p = dict(localrc=localrc, + base_services=[], + base_dir='./test', + path=os.path.join(self.tmpdir, 'test.local.conf'), + projects={}) + lc = self._init_localconf(p) + lc.write(p['path']) + + testvar = None + with open(p['path']) as f: + for line in f: + if line.startswith('TESTVAR'): + testvar = line.strip().split('=')[1] + self.assertEqual('"quoted value"', testvar) def test_plugin_circular_deps(self): "Test that plugins with circular dependencies fail" @@ -265,7 +283,7 @@ class TestDevstackLocalConf(unittest.TestCase): lc.write(p['path']) tp = self._find_tempest_plugins_value(p['path']) - self.assertEqual('someplugin', tp) + self.assertEqual('"someplugin"', tp) self.assertEqual(len(lc.warnings), 1)