我有以下SLS文件,在其中我试图将静态路由集中在minion上:
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我不确定为什么这会在第二个minion上失败。错误中的接口名称表明jinja模板的接口名称是正确的。即使salt只针对minion2,sls也无法编译。我不知道这是怎么回事,也不知道该怎么解决?
发布于 2018-08-10 04:37:41
在Gijs上面的评论之后,回答我自己的问题将我引向了这个问题。sls文件中的第二个对象
NetworkManager:在具有多个由grains返回的ip_interface值的minion2上重复。这意味着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 %}解决了这个问题。
https://stackoverflow.com/questions/51773223
复制相似问题