【问题标题】:Same jinja templated sls file complies on one host but fails to compile on another相同的 jinja 模板化 sls 文件在一台主机上兼容,但在另一台主机上编译失败
【发布时间】:2018-08-10 04:37:41
【问题描述】:

我有以下 SLS 文件,我试图将静态路由集中在 minions 上:

mpls_routing.sls:

{% for interface in grains.get('ip_interfaces') %}
{% if interface != 'lo' %}

interface-{{interface}}:
  file:
    - name: /etc/sysconfig/network-scripts/route-{{interface}}
    - managed
    - source: salt://mpls_routing/mpls_routes.cfg

NetworkManager:
  service.running:
    - enable: True
    - reload: True
    - watch:
      - file: /etc/sysconfig/network-scripts/route-{{interface}}
    - require:
      - interface-{{interface}}

{% endif %}
{% endfor %}`

当我尝试使用 state.show_sls mpls_routing 编译此 SLS 文件时,该文件在一个 minion 上编译良好,而在另一个 minion 上编译失败。

salt -v -L 'minion1,minon2' state.show_sls mpls_routing

minion1:
    ----------
    NetworkManager:
        ----------
        __env__:
            base
        __sls__:
            mpls_routing
        service:
            |_
              ----------
              enable:
                  True
            |_
              ----------
              reload:
                  True
            |_
              ----------
              watch:
                  |_
                    ----------
                    file:
                        /etc/sysconfig/network-scripts/route-ens192
            |_
              ----------
              require:
                  - interface-ens192
            - running
            |_
              ----------
              order:
                  10001
    interface-ens192:
        ----------
        __env__:
            base
        __sls__:
            mpls_routing
        file:
            |_
              ----------
              name:
                  /etc/sysconfig/network-scripts/route-ens192
            - managed
            |_
              ----------
              source:
                  salt://mpls_routing/mpls_routes.cfg
            |_
              ----------
              order:
                  10000
minion2:
    - Rendering SLS 'base:mpls_routing' failed: while constructing a mapping
        in "<unicode string>", line 6, column 1:
          interface-ens192:
          ^
      found conflicting ID 'NetworkManager'
        in "<unicode string>", line 31, column 1:
          NetworkManager:
          ^
ERROR: Minions returned with non-zero exit code

我不确定为什么第二个仆从会失败。错误中的接口名称表明 jinja 模板正在获取正确的接口名称。即使 salt 仅针对 minion2,sls 也无法编译。我不确定这里发生了什么或如何解决?

【问题讨论】:

  • 能否请您说明两个奴才都有哪些接口?
  • minion1 以上:ip_interfaces: ---------- ens192: - 172.20.1.17 - fe80::250:56ff:fea2:53c4 lo: - 127.0.0.1 - ::1 minion2: ip_interfaces: ---------- ens192: - 172.20.0.12 - fe80::250:56ff:fea2:2645 ens224: lo: - 127.0.0.1 - ::1
  • Gijs 你成功了。 minion 2 上的第二个接口正在为 NetworkManager 生成第二个映射条目。将 sls 更改为 NetworkManager-{{interface}}:

标签: salt-stack


【解决方案1】:

在 Gijs 上面的评论引导我回答我自己的问题之后。 sls文件中的第二个对象

NetworkManager:

在 minion2 上被重复,它有多个 ip_interface 值由 grains 返回。这意味着 sls 具有相同字典键的两个副本。我将 sls 文件更新为:

{% for interface in grains.get('ip_interfaces') %}
{% if interface != 'lo' %}

interface-{{interface}}:
  file:
    - name: /etc/sysconfig/network-scripts/route-{{interface}}
    - managed
    - source: salt://mpls_routing/mpls_routes.cfg

NetworkManager-{{interface}}:
  service.running:
    - name: NetworkManager
    - enable: True
    - reload: True
    - watch:
      - file: /etc/sysconfig/network-scripts/route-{{interface}}
    - require:
      - interface-{{interface}}

{% endif %}
{% endfor %}

解决了这个问题。

【讨论】:

    猜你喜欢
    • 2019-11-20
    • 2012-09-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-23
    • 2013-07-25
    • 1970-01-01
    • 2015-01-14
    相关资源
    最近更新 更多