diff options
author | Felix Fontein <felix@fontein.de> | 2021-06-14 17:38:47 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-06-14 10:38:47 -0500 |
commit | 25ac5059752f22b7e9faf1c212e5005b82838f87 (patch) | |
tree | 4e761a772a27dc2e17a16dc50180c6df483d4cc0 | |
parent | 93de61a8dab85309fa0e5b2015e25995662af468 (diff) | |
download | ansible-25ac5059752f22b7e9faf1c212e5005b82838f87.tar.gz |
Basic: don't call lstat when check_mode (#64279) (#74883)
While mode is specified in check_mode, don't call lstat.
Since file may not present.
Fixes: #61185
(cherry picked from commit 7099657dd7279ef2989d601251f46e7407a86fa6)
Co-authored-by: Logistic Bot <logistic-bot@protonmail.com>
-rw-r--r-- | changelogs/fragments/61185-basic.py-fix-check_mode.yaml | 2 | ||||
-rw-r--r-- | lib/ansible/module_utils/basic.py | 3 | ||||
-rw-r--r-- | test/units/module_utils/basic/test_set_mode_if_different.py | 7 |
3 files changed, 11 insertions, 1 deletions
diff --git a/changelogs/fragments/61185-basic.py-fix-check_mode.yaml b/changelogs/fragments/61185-basic.py-fix-check_mode.yaml new file mode 100644 index 0000000000..b05c689b2f --- /dev/null +++ b/changelogs/fragments/61185-basic.py-fix-check_mode.yaml @@ -0,0 +1,2 @@ +bugfixes: +- AnsibleModule.set_mode_if_different - don't check file existence when check_mode is activated (https://github.com/ansible/ansible/issues/61185). diff --git a/lib/ansible/module_utils/basic.py b/lib/ansible/module_utils/basic.py index cd2a055334..3810dc22a3 100644 --- a/lib/ansible/module_utils/basic.py +++ b/lib/ansible/module_utils/basic.py @@ -882,11 +882,12 @@ class AnsibleModule(object): b_path = to_bytes(path, errors='surrogate_or_strict') if expand: b_path = os.path.expanduser(os.path.expandvars(b_path)) - path_stat = os.lstat(b_path) if self.check_file_absent_if_check_mode(b_path): return True + path_stat = os.lstat(b_path) + if not isinstance(mode, int): try: mode = int(mode, 8) diff --git a/test/units/module_utils/basic/test_set_mode_if_different.py b/test/units/module_utils/basic/test_set_mode_if_different.py index 93fe2467f1..5fec331c2e 100644 --- a/test/units/module_utils/basic/test_set_mode_if_different.py +++ b/test/units/module_utils/basic/test_set_mode_if_different.py @@ -100,6 +100,13 @@ def test_mode_unchanged_when_already_0660(am, mock_stats, mocker, mode, check_mo assert not m_lchmod.called +@pytest.mark.parametrize('mode, stdin', product(SYNONYMS_0660, ({},)), indirect=['stdin']) +def test_mode_changed_to_0660_check_mode_no_file(am, mocker, mode): + am.check_mode = True + mocker.patch('os.path.exists', return_value=False) + assert am.set_mode_if_different('/path/to/file', mode, False) + + @pytest.mark.parametrize('check_mode, stdin', product((True, False), ({},)), indirect=['stdin']) |