整个 sls 文件有效

整个 sls 文件有效

我无法调用 sls 文件的单一状态。

整个 sls 文件有效

这有效:

salt-ssh w123 state.sls monitoring

这有效:

salt-ssh w123 state.show_sls monitoring

上述输出中的一项:

monitoring_packages:
    ----------
    __env__:
        base
    __sls__:
        monitoring.packages
    pkg:
        |_
          ----------
          pkgs:
              - python-psutil
        - installed
        |_
          ----------
          order:
              10000

我尝试过

现在我只想调用monitoring_packages,而不是整个 sls 文件:

失败:

salt:/srv # salt-ssh w123 state.sls_id monitoring_packages  monitoring
w123:
    Data failed to compile:
----------
    No matching sls found for 'monitoring' in env 'base'

失败:

salt:/srv # salt-ssh w123 state.single monitoring.monitoring_packages
w123:
    TypeError encountered executing state.single: single() takes at least 2 arguments (1 given)

问题

如何调用我的单身状态monitoring_packages

版本

salt:/srv # salt-ssh --version
salt-ssh 2015.8.3 (Beryllium)

答案1

我偶然发现了这篇文章,同时也在尝试弄清楚如何用常规方法做到这一点调用(即不盐-ssh)。

假设您有以下 SLS 文件(foo.sls):

bar:
   file.managed:
       - source: salt://some/file

您可以运行以下命令来仅执行状态文件中的该条目:

salt '*' state.sls_id bar foo

再次,我也不知道这一点。我在一篇评论中找到了答案谷歌小组讨论指向一个提交这里

答案2

看起来这是一个已知问题:https://github.com/saltstack/salt/issues/29253

它确实可以在 salt-ssh 之外工作。看起来需要将函数添加到该包装器中。

答案3

salt '*target*' state.sls  monitoring.<sls_file_name> <task name> -l debug

示例:假设我有一个名为 settings.sls 的 elasticserach 状态和 sls 文件,并且假设该文件里面我有任务 restart_elastic_search,现在我想调用这个特定的任务。

salt '*elastic*' state.sls  elasticsearch.settings restart_elastic_search -l debug

答案4

Salt 和 Salt-SSH 具有相同的命令,因此不必担心。

语法是:

# Pseudo code
Action + Minion-Target/s + State_Apply_Action State_file_name 

# Examples:  

salt \* state.apply myStateFile_under_base

# Nested State file
salt \* state.apply firstDirUnderBase\myStateFile

# Target only Linux Minions 
salt -G 'kernel:linux' state.apply myStateFile_under_base

.sls请注意,运行命令时,状态文件末尾没有 NO !以前可能不是这样,但在 Salt 3005 中似乎确实如此。但是,创建状态文件时.sls,扩展名确实是必需的。

相关内容