Saltstack jinja2自然排序

时间:2018-02-24 05:45:30

标签: python jinja2 salt-stack

我有pillar.example:

dnsmasq:
  zones:
    domain_com:
      hosts:
        1.1.1.1: host1
        1.1.1.2: host2
        1.1.1.3: host3
        1.1.1.21: host21

我的sls:

{% for zone in pillar['dnsmasq']['zones'] %}

/tmp/{{ zone }}:
  file.managed:
    - contents:
{% for ip, host in pillar['dnsmasq']['zones'][zone]['hosts']|dictsort  %}
           {{ ip }} {{ host }}
{% endfor %}
{% endfor %}

这会产生:

# cat /tmp/domain_com
1.1.1.1 host1
1.1.1.2 host2
1.1.1.21 host21
1.1.1.3 host3

如何在saltstack中使用人/自然排序,以便我的文件如下:

# cat /tmp/domain_com
1.1.1.1 host1
1.1.1.2 host2
1.1.1.3 host3
1.1.1.21 host21

1 个答案:

答案 0 :(得分:0)

看起来你需要写一个custom filter,因为似乎没有任何东西可以满足您的需求。

或者您拨打bash进行救援,然后使用cat /tmp/domain_com | sort -n > cat /tmp/domain_comcmd.run执行require。它使状态变得有点混乱,但保持原状。我更喜欢这种方法。

未经测试的示例

{% for zone in pillar['dnsmasq']['zones'] %}

/tmp/{{ zone }}:
  file.managed:
    - contents:
{% for ip, host in pillar['dnsmasq']['zones'][zone]['hosts'] %}
       {{ ip }} {{ host }}
{% endfor %}

cat /tmp/{{ zone }} | sort -n > /tmp/{{ zone }}:
  cmd.run:
    - require:
      - file: /tmp/{{ zone }}
{% endfor %}