Salt stack 同一个jinja模板sls文件在一台主机上兼容,但在另一台主机上编译失败

Salt stack 同一个jinja模板sls文件在一台主机上兼容,但在另一台主机上编译失败,salt-stack,Salt Stack,我有以下SLS文件,其中我正试图将静态路由集中在仆从上: 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:

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

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\u SLS mpls\u路由编译此SLS文件时,该文件在一个仆从上编译良好,在另一个仆从上编译失败

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
salt-v-L'minion1,minon2'state.show\u sls mpls\u路由
奴才1:
----------
网络管理员:
----------
__环境:
基础
__补充劳工计划:
mpls_路由
服务:
|_
----------
启用:
真的
|_
----------
重新加载:
真的
|_
----------
观察:
|_
----------
文件:
/etc/sysconfig/networkscripts/route-ens192
|_
----------
要求:
-接口-ens192
-运行
|_
----------
订单:
10001
接口-ens192:
----------
__环境:
基础
__补充劳工计划:
mpls_路由
文件:
|_
----------
姓名:
/etc/sysconfig/networkscripts/route-ens192
-管理
|_
----------
资料来源:
salt://mpls_routing/mpls_routes.cfg
|_
----------
订单:
10000
奴才2:
-构建映射时,呈现SLS“基本:mpls_路由”失败
在“”第6行第1列中:
接口-ens192:
^
发现冲突ID“NetworkManager”
在“”第31行第1列中:
网络管理员:
^
错误:仆从返回非零退出代码

我不知道为什么第二个仆从会失败。错误中的接口名称表明jinja模板获得的接口名称是正确的。即使salt的目标仅仅是仆从2,sls也无法编译。我不知道这里发生了什么或者如何修复它?

在Gijs的上述评论引导我找到它之后,我回答了自己的问题。sls文件中的第二个对象

NetworkManager:
在minion2上重复,minion2有多个由grains返回的ip_接口值。这意味着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 %}

哪个解决了问题。

您能显示哪个界面吗以上两个仆从都有?仆从1:ip_接口:-------------ens192:-172.20.1.17-fe80::250:56ff:fea2:53c4 lo:-127.0.0.1-::1仆从2:ip_接口:-------------ens192:-172.20.0.12-fe80::250:56ff:fea2:2645 ens224:lo:-127.0.0.1-::1你把它钉牢了。minion 2上的第二个接口正在为NetworkManager生成第二个映射条目。将sls更改为NetworkManager-{{interface}}: