aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--docker/base/set_configs.py11
-rw-r--r--releasenotes/notes/fix-config-check-c973c462761a4fa9.yaml6
-rw-r--r--tests/test_set_config.py41
3 files changed, 53 insertions, 5 deletions
diff --git a/docker/base/set_configs.py b/docker/base/set_configs.py
index 5f030866f..572e4a001 100644
--- a/docker/base/set_configs.py
+++ b/docker/base/set_configs.py
@@ -204,8 +204,8 @@ class ConfigFile(object):
return False
for file_ in files:
full_path = os.path.join(root, file_)
- dest_full_path = os.path.join(dest, os.path.relpath(source,
- full_path))
+ dest_full_path = os.path.join(dest, os.path.relpath(full_path,
+ source))
if not self._cmp_file(full_path, dest_full_path):
return False
return True
@@ -225,8 +225,9 @@ class ConfigFile(object):
# otherwise means copy the source to dest
if dest.endswith(os.sep):
dest = os.path.join(dest, os.path.basename(source))
- if os.path.isdir(source) and not self._cmp_dir(source, dest):
- bad_state_files.append(source)
+ if os.path.isdir(source):
+ if not self._cmp_dir(source, dest):
+ bad_state_files.append(source)
elif not self._cmp_file(source, dest):
bad_state_files.append(source)
if len(bad_state_files) != 0:
@@ -404,7 +405,7 @@ def execute_config_strategy(config):
def execute_config_check(config):
- for data in config['config_files']:
+ for data in config.get('config_files', []):
config_file = ConfigFile(**data)
config_file.check()
diff --git a/releasenotes/notes/fix-config-check-c973c462761a4fa9.yaml b/releasenotes/notes/fix-config-check-c973c462761a4fa9.yaml
new file mode 100644
index 000000000..ee87646df
--- /dev/null
+++ b/releasenotes/notes/fix-config-check-c973c462761a4fa9.yaml
@@ -0,0 +1,6 @@
+---
+fixes:
+ - |
+ Fixes an issue with the ``kolla_set_configs --check`` command when the
+ source is a directory. `LP#1890567
+ <https://bugs.launchpad.net/kolla/+bug/1890567>`__
diff --git a/tests/test_set_config.py b/tests/test_set_config.py
index 8af2e618d..3888a38cc 100644
--- a/tests/test_set_config.py
+++ b/tests/test_set_config.py
@@ -288,3 +288,44 @@ class ConfigFileTest(base.BaseTestCase):
'/foo/bar.conf'),
mock.call('/var/lib/kolla/config_files/bar.yml',
'/foo/bar.yml')])
+
+ @mock.patch.object(set_configs.ConfigFile, '_cmp_file')
+ @mock.patch.object(set_configs.ConfigFile, '_cmp_dir')
+ @mock.patch('os.path.isdir', return_value=False)
+ @mock.patch('glob.glob')
+ def test_check_source_dir(self, mock_glob, mock_isdir, mock_cmp_dir,
+ mock_cmp_file):
+ config_file = set_configs.ConfigFile(
+ '/var/lib/kolla/config_files/bar', '/foo', 'user1', '0644')
+
+ mock_glob.return_value = ['/var/lib/kolla/config_files/bar']
+ mock_isdir.return_value = True
+ mock_cmp_dir.return_value = True
+
+ config_file.check()
+
+ mock_isdir.assert_called_once_with('/var/lib/kolla/config_files/bar')
+ mock_cmp_dir.assert_called_once_with(
+ '/var/lib/kolla/config_files/bar', '/foo')
+ mock_cmp_file.assert_not_called()
+
+ @mock.patch.object(set_configs.ConfigFile, '_cmp_file')
+ @mock.patch.object(set_configs.ConfigFile, '_cmp_dir')
+ @mock.patch('os.path.isdir', return_value=False)
+ @mock.patch('glob.glob')
+ def test_check_source_dir_no_equal(self, mock_glob, mock_isdir,
+ mock_cmp_dir, mock_cmp_file):
+ config_file = set_configs.ConfigFile(
+ '/var/lib/kolla/config_files/bar', '/foo', 'user1', '0644')
+
+ mock_glob.return_value = ['/var/lib/kolla/config_files/bar']
+ mock_isdir.return_value = True
+ mock_cmp_dir.return_value = False
+
+ self.assertRaises(set_configs.ConfigFileBadState,
+ config_file.check)
+
+ mock_isdir.assert_called_once_with('/var/lib/kolla/config_files/bar')
+ mock_cmp_dir.assert_called_once_with(
+ '/var/lib/kolla/config_files/bar', '/foo')
+ mock_cmp_file.assert_not_called()