如果这个解释存在于某个地方,我花了3个月试图找到它,但失败了。我来自Puppet背景,但出于各种原因,我真的想尝试用Salt替换它。
我已经得到了一个基本的设置,我可以编写自己的状态,看到它们没有任何问题。关于此的文档非常清楚。我被困在哪里试图实施社区盐配方。我可以使用它的基本设置包含公式,它们工作正常,但我无法弄清楚如何覆盖我的支柱数据的默认值。这似乎是Salt文档最薄弱的地方。
文档说明您应该检查pillar.example以了解如何配置公式。 pillar.example清楚地给出了配置部分,但更详细的文档或柱子。示例告诉您如何将其包含在您的支柱数据中。
在我的情况下,我正在尝试使用snmp-formula。我有一个基本的盐文件结构设置,你可以从我的文件根目录中看到:
file_roots:
base:
- /srv/salt/base
- /srv/formulas/snmp-formula
内部基地我有两个支柱:
base/
top.sls
common.sls
top.sls非常简单:
base:
'*':
- common
common.sls具有所有常见配置:
include:
- snmp
- snmp.conf
- snmp.trap
- snmp.conftrap
tcpdump:
pkg.latest:
- name: tcpdump
telnet:
pkg.latest:
- name: telnet
htop:
pkg.latest:
- name: htop
snmp:
conf:
location: 'Office'
syscontact: 'Example.com Admin <admin@example.com>'
logconnects: false
# vacm com2sec's (map communities into security names)
com2sec:
- name: mynetwork
source: 192.168.0.13/31
community: public
# vacm group's (map security names to group names)
groups:
- name: MyROGroup
version: v1
secname: mynetwork
- name: MyROGroup
version: v1c
secname: mynetwork
# vacm views (map mib trees to views)
views:
- name: all
type: included
oid: '.1'
# vacm access (map groups to views with access restrictions)
access:
- name: MyROGroup
context: '""'
match: any
level: noauth
prefix: exact
read: all
write: none
notify: none
# v3 users for read-write
rwusers:
- username: 'nagios'
passphrase: 'myv3password'
view: all
在 common.sls 中,我已经包含了snmp-formula,然后按照公式中的pillar.example来自定义配置。但是当我用这个运行测试时,我得到以下错误:
Data failed to compile:
----------
Detected conflicting IDs, SLS IDs need to be globally unique.
The conflicting ID is 'snmp' and is found in SLS 'base:common' and SLS 'base:snmp'
我不知道如何处理这个问题。似乎我必须直接修改社区公式以实现我想要的,这似乎是错误的想法。我希望能够使用它的存储库保持社区公式最新,并且从Puppet的角度出发,我应该根据需要覆盖模块默认值,而不是直接修改模块。
有人可以为我找到丢失的连接吗?我如何实现pillar.example?
有问题的Salt公式在这里:
答案 0 :(得分:6)
我终于弄清楚了这一点,这是一个基本误解了&#39; file_roots&#39;之间差异的问题。和&#39; pillar_roots&#39;以及&#39;支柱&#39; vs&#39; state&#39;。我不觉得“入门指南”中的文档非常清楚,所以我会解释它,但首先是答案。
<强>解答:强>
要实现上述支柱示例,只需在您的基座中创建一个专用的 snmp.sls 文件即可。支柱数据中的环境:
/srv/pillar/snmp.sls:
snmp:
conf:
location: 'Office'
syscontact: 'Example.com Admin <admin@example.com>'
logconnects: false
# vacm com2sec's (map communities into security names)
com2sec:
- name: mynetwork
source: 192.168.0.13/31
community: public
# vacm group's (map security names to group names)
groups:
- name: MyROGroup
version: v1
secname: mynetwork
- name: MyROGroup
version: v1c
secname: mynetwork
# vacm views (map mib trees to views)
views:
- name: all
type: included
oid: '.1'
mask: 80
# vacm access (map groups to views with access restrictions)
access:
- name: MyROGroup
context: '""'
match: any
level: noauth
prefix: exact
read: all
write: none
notify: none
# v3 users for read-write
rwusers:
- username: 'nagios'
passphrase: 'myv3password'
view: all
您的pillar_root还必须包含 top.sls (不要与您所在州的file_roots中的 top.sls 混淆)像这样:
/srv/pillar/top.sls
base:
'*':
- snmp
重要提示:此目录和支柱数据的top.sls不能存在或包含在 file_roots 中!这就是我所在的位置出错了。要获得完整的图片,这是我现在拥有的配置:
/ etc / salt / master :(摘录)
file_roots:
base:
- /srv/salt/base
- /srv/formulas/snmp-formula
pillar_roots:
base:
- /srv/pillar
在 / srv / salt / base 里面我有 top.sls ,其中包含 common.sls 对于&#39;基地&#39;环境。这是snmp-formula及其状态的所在。
/srv/salt/base/top.sls:
base/
top.sls
common.sls
/srv/salt/base/common.sls:
include:
- snmp
- snmp.conf
- snmp.trap
- snmp.conftrap
tcpdump:
pkg.latest:
- name: tcpdump
telnet:
pkg.latest:
- name: telnet
htop:
pkg.latest:
- name: htop
现在支柱数据中的 snmp 参数与状态数据包含的公式中的 snmp state 的ID不冲突。