如何从 SaltStack 公式中实现 'pillar.example'?
How do I implement a 'pillar.example' from a SaltStack Formula?
如果这个解释存在于某个地方,我已经花了 3 个月的时间试图找到它,但失败了。我来自 Puppet 背景,但是出于各种原因,我真的很想尝试用 Salt 替换它。
我已经完成了基本设置,可以编写自己的状态代码并查看它们正常工作。关于此的文档非常清楚。我被困的地方是试图实施社区盐配方。我可以将公式包含在它的基本设置中并且它们工作正常,但是我无法弄清楚如何从我的支柱数据中覆盖默认值。这似乎是 Salt 文档最薄弱的地方。
文档指出您应该查看 pillar.example 以了解如何配置公式。 pillar.example 清楚地给出了配置部分,但是文档或 pillar.example 都没有告诉您 如何将其包含到您的支柱数据中 。
就我而言,我正在尝试使用 snmp 公式。我已经为我的 salt 文件结构进行了基本设置,您可以从我的文件根目录中看到:
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 公式,然后按照公式中的 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 公式在这里:
我终于弄明白了,这是一个对'file_roots'和'pillar_roots'以及'pillars'和'states'之间的区别存在根本误解的问题.我觉得入门指南中关于这些的文档不是很清楚所以我会解释它,但首先是答案。
答案:
要实现上述 pillar.example,只需在支柱数据的 'base' 环境中创建一个专用的 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 (不要与 top.sls 在你的 file_roots 中) 像这样:
/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
对于 'base' 环境。这是包含 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状态的ID不冲突.
如果这个解释存在于某个地方,我已经花了 3 个月的时间试图找到它,但失败了。我来自 Puppet 背景,但是出于各种原因,我真的很想尝试用 Salt 替换它。
我已经完成了基本设置,可以编写自己的状态代码并查看它们正常工作。关于此的文档非常清楚。我被困的地方是试图实施社区盐配方。我可以将公式包含在它的基本设置中并且它们工作正常,但是我无法弄清楚如何从我的支柱数据中覆盖默认值。这似乎是 Salt 文档最薄弱的地方。
文档指出您应该查看 pillar.example 以了解如何配置公式。 pillar.example 清楚地给出了配置部分,但是文档或 pillar.example 都没有告诉您 如何将其包含到您的支柱数据中 。
就我而言,我正在尝试使用 snmp 公式。我已经为我的 salt 文件结构进行了基本设置,您可以从我的文件根目录中看到:
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 公式,然后按照公式中的 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 公式在这里:
我终于弄明白了,这是一个对'file_roots'和'pillar_roots'以及'pillars'和'states'之间的区别存在根本误解的问题.我觉得入门指南中关于这些的文档不是很清楚所以我会解释它,但首先是答案。
答案:
要实现上述 pillar.example,只需在支柱数据的 'base' 环境中创建一个专用的 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 (不要与 top.sls 在你的 file_roots 中) 像这样:
/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 对于 'base' 环境。这是包含 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状态的ID不冲突.