是否可以根据salt环境使用Jinja呈现Salt状态文件?
这是设置服务器时区的简单示例。如果我们在“开发者”中,我想将时区设置为纽约。环境,否则时区应设置为伦敦。
timezone.sls
{% if saltenv == 'dev' %}
America/New_York
{% else %}
Europe/London
{% endif %}
timezone.system
执行salt '*' state.sls timezone saltenv='dev'
会出错:
Rendering SLS "base:timezone" failed: Jinja variable 'saltenv' is undefined; line 1
编辑 - 根据要求,这里是' top.sls'的内容。文件:
base:
'*':
- basic
- git
答案 0 :(得分:0)
我认为仆从应该有一些认识来了解角色或环境。
这是你可以做的。
第1步:将粒子分配给小兵,例如粒子名称circle
或env
和值将取决于小兵的类型,即dev
,live
,staging
等。
salt '*dev*' grains.setval circle dev
salt '*live*' grains.setval circle dev
第2步:在状态文件中,您可以执行以下操作来获取grain value
,然后根据circle
运行或分配值。在这里,我根据粒度值执行不同的cmd.run
<强> test.sls 强>
{% set circle = salt['grains.get']('circle', '') %}
run_cmd:
cmd.run:
{% if circle == 'dev' %}
- name: 'echo dev'
{% else %}
- name: 'echo live'
{% endif %}
现在,如果您运行以下命令,它将根据圆圈运行命令。
salt '*' state.sls test
如果您对仆从有绝对id
,也可以这样做,例如如果dev minion id始终为dev-server
,那么您可以运行以下命令并对其应用条件。
{% set id = salt['grains.get']('id', '') %}
答案 1 :(得分:0)
我知道我有点晚了,但如果符合你的要求,请试试这个:
# check_saltenv.sls
{% import_yaml "top.sls" as defaults %}
{% set env = defaults.iteritems()|first %}
check_saltenv_file:
cmd.run:
{% if 'prod' in env %}
- name: echo 'prod' > /tmp/check_saltenv.txt
{% elif 'tb' in env %}
- name: echo 'tb' > /tmp/check_saltenv.txt
{% elif 'dev' in env %}
- name: echo 'dev' > /tmp/check_saltenv.txt
{% endif %}
我认为您的top.sls文件中的生产/测试平台/开发环境如下所示:
生产 -
# prod/top.sls
prod:
'minion1':
- whatever
发展 -
# dev/top.sls
dev:
'minion1':
- whatever
Testbed -
# tb/top.sls
tb:
'minion1':
- whatever