如果这种解释存在于某处,则我花了3个月的时间试图找到它,但失败了。我来自Puppet背景,但是由于种种原因,我真的想尝试用Salt代替它。

我已经有了一个基本的设置,我可以编写自己的状态并查看它们的工作情况,而不会出现任何问题。关于此的文档非常清楚。我陷入困境的地方是尝试实现社区食盐配方。我可以将公式包含在其基本设置中,并且它们可以正常工作,但是我无法弄清楚如何从支柱数据中覆盖默认值。这似乎是Salt文档最薄弱的地方。

该文档指出,您应该检查theposter.example以了解如何配置该公式。虽然未提供任何文档或strand.example来告诉,如何将其包含在您的支柱数据中,无论如何,column.example都清楚地给出了配置部分。

就我而言,我正在尝试使用snmp公式。我已经为我的盐文件结构设置了一个基本设置,您可以从我的文件根目录中看到:

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 <[email protected]>'
    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,然后按照公式中的column.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角度来看,我应该根据需要覆盖模块默认值,而不是直接修改模块。

有人可以帮我联系一下吗?我该如何实现支柱。

有问题的盐配方在这里:

https://github.com/saltstack-formulas/snmp-formula

最佳答案

我终于弄清楚了,这是一个对“file_roots”和“pillar_roots”之间以及“pillars”与“states”之间差异的根本误解的问题。我不觉得《入门指南》中关于这些文档的内容非常清楚,因此我将对其进行解释,但请先给出答案。

解答:

要实现上面的prototype.example,只需在您的“基本”环境中的支柱数据中创建一个专用的 snmp.sls 文件:

/srv/pillar/snmp.sls:

snmp:
  conf:
    location: 'Office'
    syscontact: 'Example.com Admin <[email protected]>'
    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

您的bullet_root还必须包括 top.sls (不要与您的州的file_roots中的 top.sls 混淆),如下所示:

/srv/pillar/top.sls
base:
  '*':
    - snmp

重要:您的 file_roots 可能不存在此目录和用于支柱数据的top.sls!这就是我要去的地方。对于完整的图片,这是我现在拥有的配置:

/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
适用于“基本”环境。这是包含snmp公式及其状态的位置。

/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不冲突。

10-06 06:15