From df9a473ebcaf7d15055d4cc8dd7987f5121c4470 Mon Sep 17 00:00:00 2001 From: nicholasmhughes Date: Mon, 29 Apr 2024 19:49:33 -0400 Subject: [PATCH 1/2] fixes saltstack/salt#66453 sync_renderers fails when the custom renderer is specified via config --- changelog/66453.fixed.md | 1 + salt/loader/__init__.py | 15 ++++++++++++++- tests/pytests/unit/loader/test_loader.py | 17 +++++++++++++++++ 3 files changed, 32 insertions(+), 1 deletion(-) create mode 100644 changelog/66453.fixed.md diff --git a/changelog/66453.fixed.md b/changelog/66453.fixed.md new file mode 100644 index 000000000000..5de2d33337ba --- /dev/null +++ b/changelog/66453.fixed.md @@ -0,0 +1 @@ +Fix sync_renderers failure when the custom renderer is specified via config diff --git a/salt/loader/__init__.py b/salt/loader/__init__.py index 160fe8e60d00..c08e80a5d8bb 100644 --- a/salt/loader/__init__.py +++ b/salt/loader/__init__.py @@ -979,7 +979,20 @@ def render( "the needed software is unavailable".format(opts["renderer"]) ) log.critical(err) - raise LoaderError(err) + if opts.get("__role") == "minion": + default_renderer_config = salt.config.DEFAULT_MINION_OPTS["renderer"] + else: + default_renderer_config = salt.config.DEFAULT_MASTER_OPTS["renderer"] + log.warning( + "Attempting fallback to default render pipe: %s", default_renderer_config + ) + if not check_render_pipe_str( + default_renderer_config, + rend, + opts["renderer_blacklist"], + opts["renderer_whitelist"], + ): + raise LoaderError(err) return rend diff --git a/tests/pytests/unit/loader/test_loader.py b/tests/pytests/unit/loader/test_loader.py index e7359c6a74af..2a25810ceded 100644 --- a/tests/pytests/unit/loader/test_loader.py +++ b/tests/pytests/unit/loader/test_loader.py @@ -11,9 +11,11 @@ import pytest +import salt.config import salt.exceptions import salt.loader import salt.loader.lazy +from tests.support.mock import MagicMock, patch @pytest.fixture @@ -83,3 +85,18 @@ def foobar(): match="LazyLoader does not have a packed value for: __not_packed__", ): loader["mymod.foobar"]() + + +def test_render(): + opts = salt.config.DEFAULT_MINION_OPTS.copy() + minion_mods = salt.loader.minion_mods(opts) + for role in ["minion", "master"]: + opts["__role"] = role + for renderer in ["jinja|yaml", "some_custom_thing"]: + opts["renderer"] = renderer + ret = salt.loader.render(opts, minion_mods) + assert isinstance(ret, salt.loader.lazy.FilterDictWrapper) + with pytest.raises(salt.exceptions.LoaderError), patch( + "salt.loader.check_render_pipe_str", MagicMock(side_effect=[False, False]) + ): + salt.loader.render(opts, minion_mods) From 208aa47ff35876ec9b1b9880ff4aa8bad237d200 Mon Sep 17 00:00:00 2001 From: nicholasmhughes Date: Fri, 29 Nov 2024 11:41:07 -0500 Subject: [PATCH 2/2] fix pre-commit failures --- tests/pytests/unit/loader/test_loader.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/pytests/unit/loader/test_loader.py b/tests/pytests/unit/loader/test_loader.py index bbd163ba0094..71828d1effb5 100644 --- a/tests/pytests/unit/loader/test_loader.py +++ b/tests/pytests/unit/loader/test_loader.py @@ -101,7 +101,7 @@ def test_render(): ): salt.loader.render(opts, minion_mods) - + def test_return_named_context_from_loaded_func(tmp_path): opts = { "optimization_order": [0], @@ -112,4 +112,4 @@ def foobar(): """ with pytest.helpers.temp_file("mymod.py", contents, directory=tmp_path): loader = salt.loader.LazyLoader([tmp_path], opts, pack={"__test__": "meh"}) - assert loader["mymod.foobar"]() == "meh" \ No newline at end of file + assert loader["mymod.foobar"]() == "meh"