在saltstack文档中说,添加:
{% set node_type = salt['grains.get']('node_type', '') %}
{% if node_type %}
'node_type:{{ self }}':
- match: grain
- {{ self }}
{% endif %}
到
/srv/salt/top.sls
将创建一个名为node_type
我将下面的代码添加到顶层文件中,我想知道为什么我不能在我的小兵中看到node_type
:
myHost ~ # service salt-master restart; service salt-minion restart;
myHost ~ # salt '*' grains.get "node*"
最后一个命令什么都不返回。我认为这是正常的,因为我还没有在node_type
/etc/salt/grains
这让我提出一个问题:有什么区别:
top.sls
文件和
/etc/salt/grains
)或minion文件(/etc/salt/minion
)答案 0 :(得分:7)
您无法在顶层文件中创建粒子。你能指点我告诉你的文件吗?所有顶级文件都会定义应将哪些Salt状态(sls文件)应用于哪些服务器。
您可以在顶级文件中使用谷物匹配。你不会在你的头文件中声明谷物。
您可以创建一个Salt状态,为您的minion添加一个颗粒,并在您的顶级文件中引用它。文档:http://docs.saltstack.com/en/latest/ref/states/all/salt.states.grains.html#salt.states.grains.present
这是一个例子
$ cat /srv/salt/top.sls
base:
'server01':
- rolegrain
$ cat /srv/salt/rolegrain.sls
role:
grains.present:
- value: application_server
运行高位状态时,这会导致Salt ID为server01
的服务器的密钥为role
且值为application_server
。
看起来像这样:
salt server01 state.highstate
或
salt server01 state.sls rolegrain
然后你得到这个输出
salt server01 grains.item role
server01:
----------
role:
application_server
为了完整起见,请参阅以下文档。
顶部文件:http://docs.saltstack.com/en/latest/ref/states/top.html
谷物:http://docs.saltstack.com/en/latest/topics/targeting/grains.html
答案 1 :(得分:0)
您可以创建一个用于执行高级小型目标定位的顶级文件。可以根据https://docs.saltstack.com/en/latest/ref/states/top.html#advanced-minion-targeting
中显示的匹配类型完成定位我在top.sls文件中的内容是:
'site:private':
- match: grain
- path.to.state1
- path.to.state2
假设你的目标仆从有一个关键'网站'和价值'私人',你可以这样做:
salt -v 'minion_id' state.highstate test=True
这将拾取上面top.sls文件中指定的所有状态。