diff options
| -rw-r--r-- | docker/base/set_configs.py | 11 | ||||
| -rw-r--r-- | releasenotes/notes/fix-config-check-c973c462761a4fa9.yaml | 6 | ||||
| -rw-r--r-- | tests/test_set_config.py | 41 |
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() |
