2017-02-23 84 views
0

我想我在这里错过了一些非常重要的东西,但我似乎无法找到它。根据minion角色调用盐状态

我正在部署一个使用Salt的中间层环境,我想要做的是根据角色的角色运行状态文件。

我已经看到一个例子here他们使用top.sls文件进行定位,但是我可以找到很少的例子来做同样的事情。

所以,如果我的文件结构是这样的:

mesos 
     |_ init.sls 
     |_ mesos-master.sls 
     |_ mesos-slave 

,我只希望在与从属角色的仆从运行mesos-slave.sls,什么是做到这一点的最好办法。

在我无穷的智慧我以为做以下将工作(见根本性的误解首段)

init.sls

add_mesosphere_apt_repo: 
    pkgrepo.managed: 
    - name: deb http://repos.mesosphere.io/ubuntu {{ UBUNTU_VER }} main 
    - dist: {{ UBUNTU_VER }} 
    - file: /etc/apt/sources.list.d/mesosphere.list 
    - keyid: E56151BF 
    - keyserver: keyserver.ubuntu.com 

{% if salt[grains.get]('role') == 'master' %} 
    include: 
    - .mesos-master 
{% endif %} 

但我得到这里有重复的ID的错误。

我相信答案很简单,我似乎无法找到任何结论使用谷歌。

回答

0

我已决定通过top.sls下井瞄准像这样:

'roles:ms': 
    - match:grain 
    - mesos.mesos-slave 
0

使用匹配的谷物

目标爪牙时,您可以使用粒度的数据:

salt -G 'role:mesos-slave' test.ping 

使用匹配的谷物在顶部文件中

使用g在top.sls雨可以非常有效的:

'role:mesos-slave': 
    - match: grain 
    - mesos.mesos-slave 

手动同步谷物

state.highstate被称为谷物都会自动同步。但是,可以手动同步并重新加载它们:

salt '*' saltutil.sync_grains 
salt '*' saltutil.sync_all 

是否使用谷物安全定位?

谷物可以由有权访问本地系统上的minion配置文件的用户设置,因此谷物被认为不如Salt中的其他标识符安全!

注意:最好的做法是不要在您的支柱顶部文件中使用谷物匹配任何敏感支柱!

重复ID的

...但我得到这里有重复的ID的错误。

Salt当前在执行前检查重复ID。该ID在整个状态树中必须是唯一的。所有后续具有相同名称的ID声明都将被忽略。

这个问题的简单解决方案可能会确保每个ID都是唯一的。例如,您可以包括在ID声明SLS文件名:

对于mesos.mesos_master你可以使用:

mesos_master: 
    file.managed: 
    - name: ... 
    - ... 

对于mesos.mesos_slave你可以使用:

mesos_slave: 
    file.managed: 
    - name: ... 
    - ... 

这种方式,你赢了在包含和排除其他SLS文件时,不会收到'重复ID'错误。