From e64d7e9a8ec589e19e7b600d01d8f4303981820d Mon Sep 17 00:00:00 2001 From: Olivier Mehani Date: Mon, 16 Sep 2024 21:12:41 +1000 Subject: [PATCH] Add state.sls_exists to ssh client fixes: #66893 Signed-off-by: Olivier Mehani Fix typo in sate.sls_exists doctstrings (module & ssh wrapper) Signed-off-by: Olivier Mehani --- changelog/66894.added.md | 1 + salt/client/ssh/wrapper/state.py | 22 ++++++++++++++++++++++ salt/modules/state.py | 2 +- tests/integration/ssh/test_state.py | 10 ++++++++++ 4 files changed, 34 insertions(+), 1 deletion(-) create mode 100644 changelog/66894.added.md diff --git a/changelog/66894.added.md b/changelog/66894.added.md new file mode 100644 index 000000000000..f2a7bce058ae --- /dev/null +++ b/changelog/66894.added.md @@ -0,0 +1 @@ +Add support for state.sls_exists when using salt-ssh diff --git a/salt/client/ssh/wrapper/state.py b/salt/client/ssh/wrapper/state.py index 4f29c92bc176..79667a4dedea 100644 --- a/salt/client/ssh/wrapper/state.py +++ b/salt/client/ssh/wrapper/state.py @@ -1113,6 +1113,28 @@ def show_low_sls(mods, saltenv="base", test=None, **kwargs): return ret +def sls_exists(mods, test=None, queue=None, **kwargs): + """ + Tests for the existence of a specific SLS or list of SLS files on the + master. Similar to :py:func:`state.show_sls `, + rather than returning state details, returns True or False. The default + environment is ``base``, use ``saltenv`` to specify a different environment. + + .. versionadded:: 3008.0 + + saltenv + Specify a salt fileserver environment from which to look for the SLS files + specified in the ``mods`` argument + + CLI Example: + + .. code-block:: bash + + salt '*' state.sls_exists core,edit.vim saltenv=dev + """ + return isinstance(show_sls(mods, test=test, queue=queue, **kwargs), dict) + + def show_top(**kwargs): """ Return the top data that the minion will use for a highstate diff --git a/salt/modules/state.py b/salt/modules/state.py index 6440d347ffe0..d35273a5270d 100644 --- a/salt/modules/state.py +++ b/salt/modules/state.py @@ -2126,7 +2126,7 @@ def show_sls(mods, test=None, queue=None, **kwargs): def sls_exists(mods, test=None, queue=None, **kwargs): """ - Tests for the existence the of a specific SLS or list of SLS files on the + Tests for the existence of a specific SLS or list of SLS files on the master. Similar to :py:func:`state.show_sls `, rather than returning state details, returns True or False. The default environment is ``base``, use ``saltenv`` to specify a different environment. diff --git a/tests/integration/ssh/test_state.py b/tests/integration/ssh/test_state.py index 8cabc98d76b7..d56e35e08b9b 100644 --- a/tests/integration/ssh/test_state.py +++ b/tests/integration/ssh/test_state.py @@ -122,6 +122,16 @@ def test_state_show_sls(self): check_file = self.run_function("file.file_exists", [SSH_SLS_FILE], wipe=False) self.assertFalse(check_file) + def test_state_sls_exists(self): + """ + test state.sls_exists with salt-ssh + """ + ret = self.run_function("state.sls_exists", [SSH_SLS]) + self.assertTrue(ret) + + check_file = self.run_function("file.file_exists", [SSH_SLS_FILE], wipe=False) + self.assertFalse(check_file) + def test_state_show_top(self): """ test state.show_top with salt-ssh