/
githubmirror
/
salt
Обзор
Документация
Войти
/
githubmirror
/
salt
Код
Запросы
0
Пакеты
0
Релизы
0
Аналитика
Безопасность
master
tests/pytests/integration/ssh/test_grains.py
181 строка
5 KB
Daniel A. Wozniak
Improve salt-ssh relenv/thin parity and fix various regressions
05 апр 2026, 01:26
05 апр 2026, 01:26
a164b4e
Код
Авторство
О чём код?
import pytest import salt.utils.platform from tests.support.helpers import system_python_version pytestmark = [ pytest.mark.slow_test, pytest.mark.skip_on_windows(reason="salt-ssh not available on Windows"), pytest.mark.skipif( system_python_version() < (3, 10), reason="System python too old for these tests", ), ] @pytest.fixture(scope="function") def grains_filter_by_lookup(salt_ssh_cli_parameterized): ret = salt_ssh_cli_parameterized.run("grains.get", "os") assert ret.returncode == 0 assert ret.data os = ret.data return { "common": { "has_common": True, }, "custom_default": { "defaulted": True, }, "merge": { "merged": True, }, os: { "filtered": True, }, } @pytest.fixture(scope="module") def grains_filter_by_default(): """ Note: Module scope is fine here since this fixture has no dependencies. """ return { "common": { "has_common": True, }, "custom_default": { "defaulted": True, }, "merge": { "merged": True, }, } @pytest.fixture(scope="function") def grains_filter_by_states( salt_master, salt_ssh_cli, grains_filter_by_lookup, grains_filter_by_default ): filter_content = f"{{%- set lookup = {grains_filter_by_lookup} %}}" default_content = f"{{%- set lookup = {grains_filter_by_default} %}}" content = r""" {%- set res = salt["grains.filter_by"](lookup, grain="os", merge=lookup["merge"], base="common", default="custom_default") %} grains-filter-by: file.managed: - name: {{ salt["temp.file"]() }} - context: {{ res | json }} """ try: with salt_master.state_tree.base.temp_file( "grains_filter_by.sls", filter_content + content ): with salt_master.state_tree.base.temp_file( "grains_filter_by_default.sls", default_content + content ): ret = salt_ssh_cli.run("--regen-thin", "test.true") assert ret.returncode == 0 yield finally: salt_ssh_cli.run("--regen-thin", "test.true") def test_grains_id(salt_ssh_cli): """ Test salt-ssh grains id work for localhost. """ ret = salt_ssh_cli.run("grains.get", "id") assert ret.returncode == 0 assert ret.data == "localhost" def test_grains_items(salt_ssh_cli): """ test grains.items with salt-ssh """ ret = salt_ssh_cli.run("grains.items") assert ret.returncode == 0 assert ret.data assert isinstance(ret.data, dict) if salt.utils.platform.is_darwin(): grain = "Darwin" elif salt.utils.platform.is_aix(): grain = "AIX" elif salt.utils.platform.is_freebsd(): grain = "FreeBSD" else: grain = "Linux" assert ret.data["kernel"] == grain def test_grains_filter_by(salt_ssh_cli, grains_filter_by_lookup): """ test grains.filter_by with salt-ssh """ ret = salt_ssh_cli.run( "grains.filter_by", grains_filter_by_lookup, grain="os", merge=grains_filter_by_lookup["merge"], base="common", default="custom_default", ) assert ret.returncode == 0 assert ret.data assert "has_common" in ret.data assert "filtered" in ret.data assert "merged" in ret.data assert "defaulted" not in ret.data @pytest.mark.usefixtures("grains_filter_by_states") def test_grains_filter_by_jinja(salt_ssh_cli): """ test grains.filter_by during template rendering with salt-ssh """ ret = salt_ssh_cli.run("state.show_sls", "grains_filter_by") assert ret.returncode == 0 assert ret.data rendered = ret.data["grains-filter-by"]["file"][1]["context"] assert "has_common" in rendered assert "filtered" in rendered assert "merged" in rendered assert "defaulted" not in rendered def test_grains_filter_by_default(grains_filter_by_default, salt_ssh_cli_parameterized): """ test grains.filter_by with salt-ssh and default parameter (parameterized for both thin and relenv) """ ret = salt_ssh_cli_parameterized.run( "grains.filter_by", grains_filter_by_default, grain="os", merge=grains_filter_by_default["merge"], base="common", default="custom_default", ) assert ret.returncode == 0 assert ret.data assert "has_common" in ret.data assert "merged" in ret.data assert "defaulted" in ret.data @pytest.mark.usefixtures("grains_filter_by_states") def test_grains_filter_by_default_jinja( grains_filter_by_default, salt_ssh_cli_parameterized ): """ test grains.filter_by during template rendering with salt-ssh and default parameter (parameterized for both thin and relenv) """ ret = salt_ssh_cli_parameterized.run("state.show_sls", "grains_filter_by_default") assert ret.returncode == 0 assert ret.data rendered = ret.data["grains-filter-by"]["file"][1]["context"] assert "has_common" in rendered assert "merged" in rendered assert "defaulted" in rendered