盐堆:向minion或top file添加谷物

时间:2014-11-13 07:42:28

标签: python jinja2 salt-stack

在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文件
  • 中声明node_type

  • 将其简单地添加到grain文件(/etc/salt/grains)或minion文件(/etc/salt/minion

2 个答案:

答案 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文件中指定的所有状态。