mirror of
https://github.com/saltstack/salt.git
synced 2025-04-10 14:51:40 +00:00
fixes saltstack/salt#65546 add show diff for new file in file.managed
This commit is contained in:
parent
590ebf7c80
commit
e142205060
4 changed files with 73 additions and 3 deletions
1
changelog/65546.added.md
Normal file
1
changelog/65546.added.md
Normal file
|
@ -0,0 +1 @@
|
|||
Add ability to show diff for new files in file.managed
|
|
@ -5696,6 +5696,7 @@ def check_managed_changes(
|
|||
ignore_ordering=False,
|
||||
ignore_whitespace=False,
|
||||
ignore_comment_characters=None,
|
||||
new_file_diff=False,
|
||||
**kwargs,
|
||||
):
|
||||
"""
|
||||
|
@ -5750,6 +5751,12 @@ def check_managed_changes(
|
|||
|
||||
.. versionadded:: 3007.0
|
||||
|
||||
new_file_diff
|
||||
If ``True``, creation of new files will still show a diff in the
|
||||
changes return.
|
||||
|
||||
.. versionadded:: 3007.0
|
||||
|
||||
CLI Example:
|
||||
|
||||
.. code-block:: bash
|
||||
|
@ -5822,6 +5829,7 @@ def check_managed_changes(
|
|||
ignore_ordering=ignore_ordering,
|
||||
ignore_whitespace=ignore_whitespace,
|
||||
ignore_comment_characters=ignore_comment_characters,
|
||||
new_file_diff=new_file_diff,
|
||||
)
|
||||
__clean_tmp(sfn)
|
||||
return changes
|
||||
|
@ -5847,6 +5855,7 @@ def check_file_meta(
|
|||
ignore_ordering=False,
|
||||
ignore_whitespace=False,
|
||||
ignore_comment_characters=None,
|
||||
new_file_diff=False,
|
||||
):
|
||||
"""
|
||||
Check for the changes in the file metadata.
|
||||
|
@ -5961,6 +5970,12 @@ def check_file_meta(
|
|||
without disrupting production applications with a service restart.
|
||||
Implies ``ignore_ordering=True``
|
||||
|
||||
.. versionadded:: 3007.0
|
||||
|
||||
new_file_diff
|
||||
If ``True``, creation of new files will still show a diff in the
|
||||
changes return.
|
||||
|
||||
.. versionadded:: 3007.0
|
||||
"""
|
||||
changes = {}
|
||||
|
@ -5977,7 +5992,7 @@ def check_file_meta(
|
|||
except CommandExecutionError:
|
||||
lstats = {}
|
||||
|
||||
if not lstats:
|
||||
if not lstats and not new_file_diff:
|
||||
changes["newfile"] = name
|
||||
if any([ignore_ordering, ignore_whitespace, ignore_comment_characters]):
|
||||
return True, changes
|
||||
|
@ -6006,10 +6021,16 @@ def check_file_meta(
|
|||
ignore_whitespace=ignore_whitespace,
|
||||
ignore_comment_characters=ignore_comment_characters,
|
||||
)
|
||||
else:
|
||||
elif lstats:
|
||||
changes["diff"] = get_diff(
|
||||
name, sfn, template=True, show_filenames=False
|
||||
)
|
||||
else:
|
||||
with tempfile.NamedTemporaryFile() as _mt:
|
||||
_mt.write(b"")
|
||||
changes["diff"] = get_diff(
|
||||
_mt.name, sfn, template=True, show_filenames=False
|
||||
)
|
||||
except CommandExecutionError as exc:
|
||||
changes["diff"] = exc.strerror
|
||||
else:
|
||||
|
@ -6044,8 +6065,12 @@ def check_file_meta(
|
|||
ignore_whitespace=ignore_whitespace,
|
||||
ignore_comment_characters=ignore_comment_characters,
|
||||
)
|
||||
else:
|
||||
elif lstats:
|
||||
differences = get_diff(name, tmp, show_filenames=False)
|
||||
else:
|
||||
with tempfile.NamedTemporaryFile() as _mt:
|
||||
_mt.write(b"")
|
||||
differences = get_diff(_mt.name, tmp, show_filenames=False)
|
||||
except CommandExecutionError as exc:
|
||||
log.error("Failed to diff files: %s", exc)
|
||||
differences = exc.strerror
|
||||
|
@ -6056,6 +6081,9 @@ def check_file_meta(
|
|||
else:
|
||||
changes["diff"] = differences
|
||||
|
||||
if not lstats:
|
||||
return changes
|
||||
|
||||
if not salt.utils.platform.is_windows():
|
||||
# Check owner
|
||||
if user is not None and user != lstats["user"] and user != lstats["uid"]:
|
||||
|
@ -6321,6 +6349,7 @@ def manage_file(
|
|||
ignore_ordering=False,
|
||||
ignore_whitespace=False,
|
||||
ignore_comment_characters=None,
|
||||
new_file_diff=False,
|
||||
**kwargs,
|
||||
):
|
||||
"""
|
||||
|
@ -6545,6 +6574,12 @@ def manage_file(
|
|||
|
||||
.. versionadded:: 3007.0
|
||||
|
||||
new_file_diff
|
||||
If ``True``, creation of new files will still show a diff in the
|
||||
changes return.
|
||||
|
||||
.. versionadded:: 3007.0
|
||||
|
||||
CLI Example:
|
||||
|
||||
.. code-block:: bash
|
||||
|
@ -6916,6 +6951,13 @@ def manage_file(
|
|||
|
||||
# It is a new file, set the diff accordingly
|
||||
ret["changes"]["diff"] = "New file"
|
||||
if new_file_diff:
|
||||
with tempfile.NamedTemporaryFile() as _mt:
|
||||
_mt.write(b"")
|
||||
ret["changes"]["diff"] = get_diff(
|
||||
_mt.name, sfn, show_filenames=False
|
||||
)
|
||||
|
||||
if not os.path.isdir(contain_dir):
|
||||
if makedirs:
|
||||
_set_mode_and_make_dirs(name, dir_mode, mode, user, group)
|
||||
|
@ -6970,6 +7012,13 @@ def manage_file(
|
|||
else:
|
||||
tmp_.write(salt.utils.stringutils.to_bytes(contents))
|
||||
|
||||
if new_file_diff and ret["changes"]["diff"] == "New file":
|
||||
with tempfile.NamedTemporaryFile() as _mt:
|
||||
_mt.write(b"")
|
||||
ret["changes"]["diff"] = get_diff(
|
||||
_mt.name, tmp, show_filenames=False
|
||||
)
|
||||
|
||||
# Copy into place
|
||||
salt.utils.files.copyfile(
|
||||
tmp, name, __salt__["config.backup_mode"](backup), __opts__["cachedir"]
|
||||
|
|
|
@ -2324,6 +2324,7 @@ def managed(
|
|||
ignore_ordering=False,
|
||||
ignore_whitespace=False,
|
||||
ignore_comment_characters=None,
|
||||
new_file_diff=False,
|
||||
**kwargs,
|
||||
):
|
||||
r"""
|
||||
|
@ -3014,6 +3015,12 @@ def managed(
|
|||
without disrupting production applications with a service restart.
|
||||
Implies ``ignore_ordering=True``
|
||||
|
||||
.. versionadded:: 3007.0
|
||||
|
||||
new_file_diff
|
||||
If ``True``, creation of new files will still show a diff in the
|
||||
changes return.
|
||||
|
||||
.. versionadded:: 3007.0
|
||||
"""
|
||||
if "env" in kwargs:
|
||||
|
@ -3343,6 +3350,7 @@ def managed(
|
|||
ignore_ordering=ignore_ordering,
|
||||
ignore_whitespace=ignore_whitespace,
|
||||
ignore_comment_characters=ignore_comment_characters,
|
||||
new_file_diff=new_file_diff,
|
||||
**kwargs,
|
||||
)
|
||||
if any([ignore_ordering, ignore_whitespace, ignore_comment_characters]):
|
||||
|
@ -3485,6 +3493,7 @@ def managed(
|
|||
ignore_ordering=ignore_ordering,
|
||||
ignore_whitespace=ignore_whitespace,
|
||||
ignore_comment_characters=ignore_comment_characters,
|
||||
new_file_diff=new_file_diff,
|
||||
**kwargs,
|
||||
)
|
||||
except Exception as exc: # pylint: disable=broad-except
|
||||
|
@ -3577,6 +3586,7 @@ def managed(
|
|||
ignore_ordering=ignore_ordering,
|
||||
ignore_whitespace=ignore_whitespace,
|
||||
ignore_comment_characters=ignore_comment_characters,
|
||||
new_file_diff=new_file_diff,
|
||||
**kwargs,
|
||||
)
|
||||
except Exception as exc: # pylint: disable=broad-except
|
||||
|
|
|
@ -1043,3 +1043,13 @@ def test_issue_60203(
|
|||
assert "Unable to manage file" in ret.comment
|
||||
assert "/files/test.tar.gz.sha256" in ret.comment
|
||||
assert "dontshowme" not in ret.comment
|
||||
|
||||
|
||||
def test_file_managed_new_file_diff(file, tmp_path):
|
||||
name = tmp_path / "new_file_diff.txt"
|
||||
ret = file.managed(str(name), contents="EITR", new_file_diff=True, test=True)
|
||||
assert ret.changes == {"diff": "--- \n+++ \n@@ -0,0 +1 @@\n+EITR\n"}
|
||||
assert not name.exists()
|
||||
ret = file.managed(str(name), contents="EITR", new_file_diff=True)
|
||||
assert ret.changes == {"diff": "--- \n+++ \n@@ -0,0 +1 @@\n+EITR\n"}
|
||||
assert name.exists()
|
||||
|
|
Loading…
Add table
Reference in a new issue