我通过定义角色来使用 salt,将状态列表映射到要应用这些状态的主机列表:
#/srv/pillar/base/top.sls:
{% set h = 'host1, host2,' %}
'L@{{ h }}':
- roles.Servers
{% set h = 'host3, host4,' %}
'L@{{ h }}':
- roles.newServers
#/srv/salt/base/top.sls:
base:
'role:Server': # Mapping a host to a role can be found in: /srv/pillar/top.sls
- match: pillar
- mystate1 # "shared" statefile
- mystate2
'role:newServer':
- match: pillar
- mystate1 # "shared" statefile
- mystate3
现在,在类似下面的 mystate1.sls 的状态下,我想对状态所起的作用做出一些改变,这应该取决于从选择 minion 的角色中得到的主机列表。
# /srv/salt/base/mystate1.sls
newPkg:
pkg.installed:
- pkgs:
{% if grains['id'] in roles[ 'Server' ] %} # pseude code: check if 'id' is in hostlist for role 'Server'
- mypackage1 # do this if the current host is in the hostlist of role 'Servers'
{% else %}
- myNewPackage # do that if the host is part of role 'newServers'
{% endif %}
因此,我想要检查被调用状态的 minion 的状态,看看该 minion 是否属于角色“Server”或“newServer”的主机列表。
任何想法?
答案1
两个主要选项。第一:
{% if salt["match.pillar"]("role:Server") %}
其次,如果角色定义为单个值:
{% if pillar["role"] == 'Server' %}
或者如果它是一个列表:
{% if 'Server' in pillar["role"] %}