diff --git a/changelog/68224.added.md b/changelog/68224.added.md new file mode 100644 index 000000000000..0926faead7b6 --- /dev/null +++ b/changelog/68224.added.md @@ -0,0 +1 @@ +Added the ability to pass the context to pyobjects renderer diff --git a/salt/renderers/pyobjects.py b/salt/renderers/pyobjects.py index a719b34ef5f7..ed4959377491 100644 --- a/salt/renderers/pyobjects.py +++ b/salt/renderers/pyobjects.py @@ -376,10 +376,13 @@ def load_states(): __context__["pyobjects_states"] = states -def render(template, saltenv="base", sls="", salt_data=True, **kwargs): +def render(template, saltenv="base", sls="", salt_data=True, context=None, **kwargs): if "pyobjects_states" not in __context__: load_states() + if context is None: + context = {} + # these hold the scope that our sls file will be executed with _globals = {} @@ -423,6 +426,7 @@ def render(template, saltenv="base", sls="", salt_data=True, **kwargs): "__sls__": sls, } ) + _globals.update(context) except NameError: pass diff --git a/tests/pytests/unit/utils/test_pyobjects.py b/tests/pytests/unit/utils/test_pyobjects.py index 343c582ff419..65d35ad56212 100644 --- a/tests/pytests/unit/utils/test_pyobjects.py +++ b/tests/pytests/unit/utils/test_pyobjects.py @@ -35,7 +35,7 @@ def readlines(): # pylint: disable=no-method-argument return [ "#!pyobjects", "state_id = __sls__ + '_' + __opts__['id']", - "File.directory(state_id, name='/tmp', mode='1777', owner='root', group='root')", + "File.directory(state_id, name='/tmp', mode='1777', owner=passed_owner, group=passed_group)", ] return Template @@ -43,7 +43,9 @@ def readlines(): # pylint: disable=no-method-argument @pytest.mark.slow_test def test_opts_and_sls_access(pyobjects_template): - ret = pyobjects.render(pyobjects_template, sls="pyobj.runtest") + context = {"passed_owner": "root", "passed_group": "root"} + + ret = pyobjects.render(pyobjects_template, sls="pyobj.runtest", context=context) assert ret == OrderedDict( [ (