Соль: используйте пользовательские зерна в SLS

Я пытаюсь использовать пользовательское зерно в своем 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 никогда не вызывается. Почему?

Кроме того, как я могу указать параметр «перезагрузка» для команды запуска?


person Denis Witt    schedule 02.09.2013    source источник
comment
Хм, странно. Если я использую cmd.run вместо nginx.signal для запуска /etc/init.d/nginx reload, команда выполняется для всех миньонов, даже если «кластер» является «пассивным».   -  person Denis Witt    schedule 03.09.2013
comment
Вы пытались следить за файлом журнала вашего миньона, чтобы узнать, говорит ли он что-нибудь? Я полагаю, что модуль nginx.signal требует аргумента, который вы не предоставляете, поэтому он ничего не делает (?)   -  person Jonathan Ballet    schedule 03.09.2013


Ответы (2)


Я считаю, что вы можете предоставить аргумент reload, используя следующее:

nginx.signal:
    module:
        - run
        - signal: reload
person Jonathan Ballet    schedule 03.09.2013

Похоже, что тест не возвращает true, потому что значение, возвращаемое зерном вашего кластера, представляет собой список, а не строку. Например, для поиска в списке строки "passive" используйте синтаксис "foo" в bar["baz"], а не bar["baz"] == "foo".

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

Если ваше зерно возвращает список, это должно исправить ваш шаблон:

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

И он должен вернуть true.

person Community    schedule 18.06.2014