如何从SaltStack公式实现'pillar.example'?

Rou*_*tor 4 salt-stack

如果这个解释存在于某个地方,我花了3个月试图找到它,但失败了.我来自Puppet背景,但由于各种原因,我真的想尝试用Salt替换它.

我已经得到了一个基本设置,我可以编写自己的状态,看到它们没有任何问题.关于此的文档非常清楚.我被困在哪里试图实施社区盐配方.我可以使用它的基本设置包含公式,它们工作正常,但我无法弄清楚如何覆盖我的支柱数据的默认值.这似乎是Salt文档最薄弱的地方.

文档说明您应该检查pillar.example以了解如何配置公式.pillar.example清楚地给出了配置部分,但是更详细的文档或柱子.示例告诉您如何将其包含在您的支柱数据中.

在我的情况下,我正在尝试使用snmp-formula.我有一个基本的盐文件结构设置,您可以从我的文件根目录中看到:

file_roots:
  base:
  - /srv/salt/base
  - /srv/formulas/snmp-formula
Run Code Online (Sandbox Code Playgroud)

在基地内我有两个支柱:

base/
  top.sls
  common.sls
Run Code Online (Sandbox Code Playgroud)

top.sls非常简单:

base:
  '*':
    - common
Run Code Online (Sandbox Code Playgroud)

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
Run Code Online (Sandbox Code Playgroud)

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'
Run Code Online (Sandbox Code Playgroud)

我不知道如何处理这个问题.似乎我必须直接修改社区公式以实现我想要的,这似乎是错误的想法.我希望能够使用它的存储库保持社区公式最新,并且从Puppet的角度出发,我应该根据需要覆盖模块默认值,而不是直接修改模块.

有人可以为我找到丢失的连接吗?我如何实现pillar.example?

有问题的Salt公式在这里:

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

Rou*_*tor 6

我终于想到了这一点,这是一个问题,对'file_roots'和'pillar_roots'以及'支柱'与'状态'之间的差异存在根本性的误解.我不认为"入门指南"中有关这些内容的文档非常清楚,所以我将解释它,但首先是答案.

回答:

要实现上面的pillar.example,只需在支柱数据的"基础"环境中创建一个专用的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
Run Code Online (Sandbox Code Playgroud)

你的pillar_root还必须包含一个top.sls (不要与你文件的file_roots中的top.sls 混淆),如下所示:

/srv/pillar/top.sls

base:
  '*':
    - snmp
Run Code Online (Sandbox Code Playgroud)

重要说明:此目录和支柱数据的top.sls 不能存在或包含在file_roots中!这是我出错的地方.要获得完整的图片,这是我现在拥有的配置:

/ etc/salt/master :(片段)

file_roots:
  base:
  - /srv/salt/base
  - /srv/formulas/snmp-formula

pillar_roots:
  base:
  - /srv/pillar
Run Code Online (Sandbox Code Playgroud)

/ srv/salt/base里面我有一个top.sls,它包含了一个 用于'base'环境的common.sls.这是包含snmp-formula及其状态的地方.

/srv/salt/base/top.sls:

base/
  top.sls
  common.sls
Run Code Online (Sandbox Code Playgroud)

/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
Run Code Online (Sandbox Code Playgroud)

现在,支柱数据中的snmp参数与状态数据包含的公式中的snmp状态的 ID不冲突.

  • 感谢您的问答,确实 SaltStack 文档在某些地方是垃圾,在这些地方我们只需要知道如何实现,而没有任何具体的文档可以依靠。 (2认同)