在Saltstack中,我有以下用例:
有一个状态redis.sls可以包含在其他州。 redis.sls的结果应该以不同的方式配置,具体取决于包含redis.sls的状态。
例如:
redis.sls:
--------
{% if x==1 %}
#do something
{% else %}
#do something else
{% endif %}
state_a.sls
-----------
{% set x=1 %}
include:
- redis
state_b.sls
-----------
{% set x=2 %}
include:
- redis
但* state_a *和* state_b *
中无法识别 x我也试过设置这样的支柱值:
{{salt['pillar.set']('x', 1)}}
但这也不起作用。
还有其他想法吗?
答案 0 :(得分:1)
我想听听专家的意见,但我有类似的用例。我所做的是使用jinja template扩展基本模板,然后我的子模板填充变量。
{% extends "base.template.sls" %}
{% block x %}1{% endblock %}
唯一的问题可能是您现在必须单独调用state_a和state_b,但如果您想要两者都调用,则可以将它们放在以逗号分隔的列表中。
答案 1 :(得分:1)
让你的redis状态为jinja宏。
eventID
为了清楚起见,redis.sls应该在这里重命名为redis.jinja。
在Salt Formulas conventions guide中最好地解释了这个以及管理状态定制的许多其他方法。特别是关于Jinja宏的部分
请注意,您可以完全避免使用if x == 1逻辑,看一下“更好”的情况。指南中的haproxy示例。
答案 2 :(得分:0)
看起来您希望根据取决于它的内容或使用位置来参数化状态。这听起来像是设置redis.sls状态应该变异的参数,取决于redis的特定配置。
对我而言,似乎有多个不同的状态可以使用redis,并且您的某些状态依赖于一种redis状态,而其他状态依赖于其他状态的redis。
所以,给redis安装一个状态,redis的具体配置各自得到自己的状态。您的 state_a 可能取决于 redis_state_1 ,而 state_b 依赖于 redis_state_2 。 redis_state_1 和 redis_state_2 都取决于 redis 。在我看来,传递给你的参数不太明确。
答案 3 :(得分:-1)
SALT.STATES.ENVIRON可能适合您:
set_secret_key:
environ.setenv:
- name: SECRET_KEY
- value: ABC123!@#abc
- update_minion: True
[..]
settings_secret_key:
file.replace:
- name: {{ salt['pillar.get']('data:source_folder') }}superlists/settings.py
- pattern: "SECRET_KEY =.+$"
- repl: 'SECRET_KEY = os.environ["SECRET_KEY"]'