【问题标题】:Salt: Use custom grains in SLS盐:在 SLS 中使用自定义颗粒
【发布时间】:2013-09-02 22:07:06
【问题描述】:

我正在尝试在我的 init.sls 中使用自定义颗粒,但 if 语句永远不会正确。这是我的自定义谷物:

salt '*' grains.item cluster

proxy2.example.com:
  cluster:
      passive
proxy1.example.com:
  cluster:
      active

我的 init.sls 调用:

{% if grains['cluster'] == 'active' %}
  nginx.signal:
    module:
      - run
      - order: 15
{% endif %}

但是 nginx.signal 永远不会被调用。为什么?

另外,我如何将参数“重新加载”提供给运行命令?

【问题讨论】:

  • 嗯,奇怪。如果我使用 cmd.run 而不是 nginx.signal 来运行 /etc/init.d/nginx reload 该命令将在所有 Minions 上执行,即使“集群”是“被动”。
  • 您是否尝试过跟踪您的 Minion 的日志文件以查看它是否说明了什么?我相信,nginx.signal 模块需要一个您没有提供的参数,因此它没有做任何事情(?)

标签: nginx module salt-stack


【解决方案1】:

我相信您可以使用以下方法提供 reload 参数:

nginx.signal:
    module:
        - run
        - signal: reload

【讨论】:

    【解决方案2】:

    测试似乎没有返回 true,因为集群粒度返回的值是一个列表,而不是一个字符串。例如,要在列表中搜索字符串“passive”,请在 bar["baz"] 中使用语法 "foo",而不是 bar["baz"] == "foo"。

    >>> grains = {}
    >>> grains["cluster"] = ["passive"]
    >>> grains["cluster"]
    ['passive']
    >>> grains["cluster"] == "passive"
    False
    >>> "passive" in grains["cluster"]
    True
    >>>
    

    如果你的grain返回一个列表,这应该修复你的模板:

    {% if "active" in grains.get("cluster","") %}
    

    它应该返回 true。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-08-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-04-11
      • 2018-07-27
      • 1970-01-01
      相关资源
      最近更新 更多