我通过定义角色来使用 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”的主机列表。
任何想法?
两个主要选项。第一的:
其次,如果角色定义为单个值:
或者如果它是一个列表: