根据minion角色调用salt状态

时间:2017-02-23 11:11:56

标签: salt-stack mesosphere

我认为我错过了一些非常基本的东西,但我似乎无法弄明白。

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

我已经看到了一个示例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的错误。

我确定答案非常简单,我似乎无法使用Google找到任何结论。

2 个答案:

答案 0 :(得分:0)

我决定通过top.sls进行定位,如下所示:

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

答案 1 :(得分:0)

使用谷物匹配

您可以在定位奴才时使用谷物数据:

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

使用topfile中的grain匹配

使用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: ...
    - ...

这种方式您无法收到' 重复ID '包含和排除其他SLS文件时出错。