mirror of
https://github.com/saltstack/salt.git
synced 2025-04-17 10:10:20 +00:00
151 lines
4.3 KiB
Python
151 lines
4.3 KiB
Python
import pytest
|
|
from saltfactories.utils.functional import StateResult
|
|
|
|
pytestmark = [
|
|
pytest.mark.skip_on_windows(reason="salt-ssh not available on Windows"),
|
|
]
|
|
|
|
|
|
@pytest.mark.slow_test
|
|
def test_echo(salt_ssh_cli, base_env_state_tree_root_dir):
|
|
"""
|
|
verify salt-ssh can use imported map files in states
|
|
"""
|
|
name = "echo"
|
|
echo = "hello"
|
|
state_file = """
|
|
ssh_test_echo:
|
|
test.show_notification:
|
|
- text: {{{{ salt['test.echo']('{echo}') }}}}
|
|
""".format(
|
|
echo=echo
|
|
)
|
|
state_tempfile = pytest.helpers.temp_file(
|
|
f"{name}.sls", state_file, base_env_state_tree_root_dir
|
|
)
|
|
|
|
with state_tempfile:
|
|
ret = salt_ssh_cli.run("state.apply", name)
|
|
result = StateResult(ret.data)
|
|
assert result.comment == echo
|
|
|
|
|
|
@pytest.fixture
|
|
def _exewrap(base_env_state_tree_root_dir, salt_run_cli):
|
|
exe = """
|
|
def run():
|
|
return "exe"
|
|
"""
|
|
|
|
wrapper = """
|
|
def run():
|
|
return "wrapper"
|
|
"""
|
|
name = "exewrap"
|
|
try:
|
|
with pytest.helpers.temp_file(
|
|
f"{name}.py", exe, base_env_state_tree_root_dir / "_modules"
|
|
):
|
|
with pytest.helpers.temp_file(
|
|
f"{name}.py", wrapper, base_env_state_tree_root_dir / "_wrapper"
|
|
):
|
|
res = salt_run_cli.run("saltutil.sync_all")
|
|
assert res.returncode == 0
|
|
assert f"modules.{name}" in res.data["modules"]
|
|
assert f"wrapper.{name}" in res.data["wrapper"]
|
|
yield name
|
|
finally:
|
|
res = salt_run_cli.run("saltutil.sync_all")
|
|
assert res.returncode == 0
|
|
|
|
|
|
@pytest.fixture
|
|
def _jinja_loader_attr_template(base_env_state_tree_root_dir, _exewrap):
|
|
contents = f"""
|
|
foo:
|
|
test.show_notification:
|
|
- text: {{{{ salt.{_exewrap}.run() | json }}}}
|
|
"""
|
|
name = "funcwrapper_attr_exewrap_test"
|
|
with pytest.helpers.temp_file(
|
|
f"{name}.sls", contents, base_env_state_tree_root_dir
|
|
):
|
|
yield name
|
|
|
|
|
|
def test_wrapper_attribute_access(_jinja_loader_attr_template, salt_ssh_cli):
|
|
"""
|
|
Ensure wrappers can be accessed via the attribute syntax.
|
|
It's not recommended to use this syntax, but the regular loader supports it
|
|
as well, so we should have feature parity.
|
|
Issue #66600.
|
|
"""
|
|
res = salt_ssh_cli.run("state.apply", _jinja_loader_attr_template)
|
|
assert res.returncode == 0
|
|
ret = StateResult(res.data)
|
|
assert ret.result is True
|
|
assert ret.comment == "wrapper"
|
|
|
|
|
|
@pytest.fixture
|
|
def _jinja_loader_get_template(base_env_state_tree_root_dir, _exewrap):
|
|
contents = """
|
|
foo:
|
|
test.show_notification:
|
|
- text: {{ salt.grains.get("id") | json }}
|
|
"""
|
|
name = "funcwrapper_attr_get_test"
|
|
with pytest.helpers.temp_file(
|
|
f"{name}.sls", contents, base_env_state_tree_root_dir
|
|
):
|
|
yield name
|
|
|
|
|
|
def test_wrapper_attribute_access_get(_jinja_loader_get_template, salt_ssh_cli):
|
|
"""
|
|
Ensure a function named `.get` is not shadowed when accessed via attribute syntax.
|
|
It's not recommended to use it, but the regular loader supports it
|
|
as well, so we should have feature parity.
|
|
Issue #41794.
|
|
"""
|
|
res = salt_ssh_cli.run("state.apply", _jinja_loader_get_template)
|
|
assert res.returncode == 0
|
|
ret = StateResult(res.data)
|
|
assert ret.result is True
|
|
assert ret.comment == "localhost"
|
|
|
|
|
|
@pytest.fixture
|
|
def _python_loader_attribute_access_template(base_env_state_tree_root_dir, _exewrap):
|
|
contents = """
|
|
#!py
|
|
def run():
|
|
return {
|
|
"foo": {
|
|
"test.show_notification": [
|
|
{"text": __salt__.grains.get("id")}
|
|
]
|
|
}
|
|
}
|
|
"""
|
|
name = "funcwrapper_attr_python_test"
|
|
with pytest.helpers.temp_file(
|
|
f"{name}.sls", contents, base_env_state_tree_root_dir
|
|
):
|
|
yield name
|
|
|
|
|
|
def test_wrapper_attribute_access_non_jinja(
|
|
_python_loader_attribute_access_template, salt_ssh_cli
|
|
):
|
|
"""
|
|
Ensure attribute access works with non-Jinja renderers.
|
|
It's not recommended to use this syntax, but the regular loader supports it
|
|
as well, so we should have feature parity.
|
|
Issue #66376.
|
|
"""
|
|
res = salt_ssh_cli.run("state.apply", _python_loader_attribute_access_template)
|
|
assert res.returncode == 0
|
|
ret = StateResult(res.data)
|
|
assert ret.result is True
|
|
assert ret.comment == "localhost"
|