mirror of
https://github.com/saltstack/salt.git
synced 2025-04-16 09:40:20 +00:00
fixes saltstack/salt#63093 add ability for file.symlink to not set ownership on existing links
This commit is contained in:
parent
43fa0b2f75
commit
4109c784b7
3 changed files with 56 additions and 4 deletions
1
changelog/63093.added
Normal file
1
changelog/63093.added
Normal file
|
@ -0,0 +1 @@
|
||||||
|
Add ability for file.symlink to not set ownership on existing links
|
|
@ -1537,6 +1537,7 @@ def symlink(
|
||||||
win_inheritance=None,
|
win_inheritance=None,
|
||||||
atomic=False,
|
atomic=False,
|
||||||
disallow_copy_and_unlink=False,
|
disallow_copy_and_unlink=False,
|
||||||
|
inherit_user_and_group=False,
|
||||||
**kwargs
|
**kwargs
|
||||||
):
|
):
|
||||||
"""
|
"""
|
||||||
|
@ -1581,11 +1582,13 @@ def symlink(
|
||||||
|
|
||||||
user
|
user
|
||||||
The user to own the file, this defaults to the user salt is running as
|
The user to own the file, this defaults to the user salt is running as
|
||||||
on the minion
|
on the minion unless the link already exists and
|
||||||
|
``inherit_user_and_group`` is set
|
||||||
|
|
||||||
group
|
group
|
||||||
The group ownership set for the file, this defaults to the group salt
|
The group ownership set for the file, this defaults to the group salt
|
||||||
is running as on the minion. On Windows, this is ignored
|
is running as on the minion unless the link already exists and
|
||||||
|
``inherit_user_and_group`` is set. On Windows, this is ignored
|
||||||
|
|
||||||
mode
|
mode
|
||||||
The permissions to set on this file, aka 644, 0775, 4664. Not supported
|
The permissions to set on this file, aka 644, 0775, 4664. Not supported
|
||||||
|
@ -1630,6 +1633,15 @@ def symlink(
|
||||||
``shutil.move`` will be used in order to fall back on a "copy then
|
``shutil.move`` will be used in order to fall back on a "copy then
|
||||||
unlink" approach, which is required for moving across filesystems.
|
unlink" approach, which is required for moving across filesystems.
|
||||||
|
|
||||||
|
.. versionadded:: 3006.0
|
||||||
|
|
||||||
|
inherit_user_and_group
|
||||||
|
If set to ``True``, the link already exists, and either ``user`` or
|
||||||
|
``group`` are not set, this parameter will inform Salt to pull the user
|
||||||
|
and group information from the existing link and use it where ``user``
|
||||||
|
or ``group`` is not set. The ``user`` and ``group`` parameters will
|
||||||
|
override this behavior.
|
||||||
|
|
||||||
.. versionadded:: 3006.0
|
.. versionadded:: 3006.0
|
||||||
"""
|
"""
|
||||||
name = os.path.expanduser(name)
|
name = os.path.expanduser(name)
|
||||||
|
@ -1642,6 +1654,18 @@ def symlink(
|
||||||
mode = salt.utils.files.normalize_mode(mode)
|
mode = salt.utils.files.normalize_mode(mode)
|
||||||
|
|
||||||
user = _test_owner(kwargs, user=user)
|
user = _test_owner(kwargs, user=user)
|
||||||
|
|
||||||
|
if (
|
||||||
|
inherit_user_and_group
|
||||||
|
and (user is None or group is None)
|
||||||
|
and __salt__["file.is_link"](name)
|
||||||
|
):
|
||||||
|
cur_user, cur_group = _get_symlink_ownership(name)
|
||||||
|
if user is None:
|
||||||
|
user = cur_user
|
||||||
|
if group is None:
|
||||||
|
group = cur_group
|
||||||
|
|
||||||
if user is None:
|
if user is None:
|
||||||
user = __opts__["user"]
|
user = __opts__["user"]
|
||||||
|
|
||||||
|
|
|
@ -392,9 +392,36 @@ def test_symlink():
|
||||||
), patch(
|
), patch(
|
||||||
"salt.states.file._check_symlink_ownership", return_value=True
|
"salt.states.file._check_symlink_ownership", return_value=True
|
||||||
):
|
):
|
||||||
group = None
|
|
||||||
|
|
||||||
comt = "Created new symlink {} -> {}".format(name, target)
|
comt = "Created new symlink {} -> {}".format(name, target)
|
||||||
ret = return_val({"comment": comt, "result": True, "changes": {"new": name}})
|
ret = return_val({"comment": comt, "result": True, "changes": {"new": name}})
|
||||||
res = filestate.symlink(name, target, user=user, group=user)
|
res = filestate.symlink(name, target, user=user, group=user)
|
||||||
assert res == ret
|
assert res == ret
|
||||||
|
|
||||||
|
with patch.dict(
|
||||||
|
filestate.__salt__,
|
||||||
|
{
|
||||||
|
"file.is_link": mock_t,
|
||||||
|
"file.get_user": mock_user,
|
||||||
|
"file.get_group": mock_grp,
|
||||||
|
"file.user_to_uid": mock_uid,
|
||||||
|
"file.group_to_gid": mock_gid,
|
||||||
|
"file.readlink": mock_target,
|
||||||
|
},
|
||||||
|
), patch.dict(filestate.__opts__, {"test": False}), patch.object(
|
||||||
|
os.path, "isdir", MagicMock(side_effect=[True, False])
|
||||||
|
), patch.object(
|
||||||
|
os.path, "isfile", mock_f
|
||||||
|
), patch(
|
||||||
|
"salt.utils.win_functions.get_sid_from_name", return_value="test-sid"
|
||||||
|
), patch(
|
||||||
|
"salt.states.file._set_symlink_ownership", return_value=True
|
||||||
|
), patch(
|
||||||
|
"salt.states.file._check_symlink_ownership", return_value=True
|
||||||
|
):
|
||||||
|
if salt.utils.platform.is_windows():
|
||||||
|
comt = "Symlink {} is present and owned by {}".format(name, user)
|
||||||
|
else:
|
||||||
|
comt = "Symlink {} is present and owned by {}:{}".format(name, user, group)
|
||||||
|
ret = return_val({"comment": comt, "result": True, "changes": {}})
|
||||||
|
res = filestate.symlink(name, target, inherit_user_and_group=True)
|
||||||
|
assert res == ret
|
||||||
|
|
Loading…
Add table
Reference in a new issue