我认为我错过了一些非常基本的东西,但我似乎无法弄明白。
我正在使用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找到任何结论。
答案 0 :(得分:0)
我决定通过top.sls
进行定位,如下所示:
'roles:ms':
- match:grain
- mesos.mesos-slave
答案 1 :(得分:0)
您可以在定位奴才时使用谷物数据:
salt -G 'role:mesos-slave' test.ping
使用top.sls
中的谷物进行匹配可能非常有效:
'role:mesos-slave':
- match: grain
- mesos.mesos-slave
调用state.highstate
时会自动同步谷物。但是,可以手动同步和重新加载它们:
salt '*' saltutil.sync_grains
salt '*' saltutil.sync_all
可以由有权访问本地系统上的minion配置文件的用户设置谷物,因此谷物被认为不如Salt中的其他标识符安全!
注意:最佳做法是不要在柱顶文件中使用谷物匹配任何敏感支柱!
...但我得到的只是重复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文件时出错。