Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
SUSE:SLE-12-SP2:GA
salt.26901
fix-salt.states.file.managed-for-follow_symlink...
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File fix-salt.states.file.managed-for-follow_symlinks-tru.patch of Package salt.26901
From a689a32f00e29c74b24bb52db6e555931b9ccd36 Mon Sep 17 00:00:00 2001 From: Petr Pavlu <31453820+petrpavlu@users.noreply.github.com> Date: Fri, 8 Jul 2022 10:11:58 +0200 Subject: [PATCH] Fix salt.states.file.managed() for follow_symlinks=True and test=True (bsc#1199372) (#536) When managing file /etc/test as follows: > file /etc/test: > file.managed: > - name: /etc/test > - source: salt://config/test > - mode: 644 > - follow_symlinks: True and with /etc/test being a symlink to a different file, an invocation of "salt-call '*' state.apply test=True" can report that the file should be updated even when a subsequent run of the same command without the test parameter makes no changes. The problem is that the test code path doesn't take correctly into account the follow_symlinks=True setting and ends up comparing permissions of the symlink instead of its target file. The patch addresses the problem by extending functions salt.modules.file.check_managed(), check_managed_changes() and check_file_meta() to have the follow_symlinks parameter which gets propagated to the salt.modules.file.stats() call and by updating salt.states.file.managed() to forward the same parameter to salt.modules.file.check_managed_changes(). Fixes #62066. [Cherry-picked from upstream commit 95bfbe31a2dc54723af3f1783d40de152760fe1a. The backport drops tests/pytests/unit/modules/file/test_file_check.py because the test requires unavailable patching of loader modules.] --- changelog/62066.fixed | 1 + salt/modules/file.py | 31 +++++++++++++++++++++++++++---- salt/states/file.py | 1 + 3 files changed, 29 insertions(+), 4 deletions(-) create mode 100644 changelog/62066.fixed diff --git a/changelog/62066.fixed b/changelog/62066.fixed new file mode 100644 index 0000000000..68216a03c1 --- /dev/null +++ b/changelog/62066.fixed @@ -0,0 +1 @@ +Fixed salt.states.file.managed() for follow_symlinks=True and test=True diff --git a/salt/modules/file.py b/salt/modules/file.py index 8a9fd84a99..ece572a82d 100644 --- a/salt/modules/file.py +++ b/salt/modules/file.py @@ -4748,10 +4748,17 @@ def check_managed( saltenv, contents=None, skip_verify=False, + follow_symlinks=False, **kwargs): ''' Check to see what changes need to be made for a file + follow_symlinks + If the desired path is a symlink, follow it and check the permissions + of the file to which the symlink points. + + .. versionadded:: 3005 + CLI Example: .. code-block:: bash @@ -4787,7 +4794,8 @@ def check_managed( __clean_tmp(sfn) return False, comments changes = check_file_meta(name, sfn, source, source_sum, user, - group, mode, attrs, saltenv, contents) + group, mode, attrs, saltenv, contents, + follow_symlinks=follow_symlinks) # Ignore permission for files written temporary directories # Files in any path will still be set correctly using get_managed() if name.startswith(tempfile.gettempdir()): @@ -4819,10 +4827,17 @@ def check_managed_changes( contents=None, skip_verify=False, keep_mode=False, + follow_symlinks=False, **kwargs): ''' Return a dictionary of what changes need to be made for a file + follow_symlinks + If the desired path is a symlink, follow it and check the permissions + of the file to which the symlink points. + + .. versionadded:: 3005 + CLI Example: .. code-block:: bash @@ -4870,7 +4885,8 @@ def check_managed_changes( except Exception as exc: # pylint: disable=broad-except log.warning('Unable to stat %s: %s', sfn, exc) changes = check_file_meta(name, sfn, source, source_sum, user, - group, mode, attrs, saltenv, contents) + group, mode, attrs, saltenv, contents, + follow_symlinks=follow_symlinks) __clean_tmp(sfn) return changes @@ -4885,7 +4901,8 @@ def check_file_meta( mode, attrs, saltenv, - contents=None): + contents=None, + follow_symlinks=False): ''' Check for the changes in the file metadata. @@ -4935,6 +4952,12 @@ def check_file_meta( contents File contents + + follow_symlinks + If the desired path is a symlink, follow it and check the permissions + of the file to which the symlink points. + + .. versionadded:: 3005 ''' changes = {} if not source_sum: @@ -4942,7 +4965,7 @@ def check_file_meta( try: lstats = stats(name, hash_type=source_sum.get('hash_type', None), - follow_symlinks=False) + follow_symlinks=follow_symlinks) except CommandExecutionError: lstats = {} diff --git a/salt/states/file.py b/salt/states/file.py index 847cbace51..2e0a1c5835 100644 --- a/salt/states/file.py +++ b/salt/states/file.py @@ -3043,6 +3043,7 @@ def managed(name, contents, skip_verify, keep_mode, + follow_symlinks=follow_symlinks, **kwargs ) -- 2.36.1
Locations
Projects
Search
Status Monitor
Help
OpenBuildService.org
Documentation
API Documentation
Code of Conduct
Contact
Support
@OBShq
Terms
openSUSE Build Service is sponsored by
The Open Build Service is an
openSUSE project
.
Sign Up
Log In
Places
Places
All Projects
Status Monitor