Ansible Jinja2 всегда показывает «Изменено»

#ansible #network-programming #jinja2 #cisco-ios

#ansible #сетевое программирование #jinja2 #cisco-ios

Вопрос:

У меня есть шаблон Jinja2, который я использую для устройств Cisco IOS. В настоящее время мой сборник пьес работает нормально, но всегда показывает «изменено», несмотря на отсутствие очевидных изменений… Я запустил с подробным тегом и получил вывод ниже, но не увидел ничего очевидного. Является ли это нормальным поведением, и если нет, знает ли кто-нибудь обходной / лучший способ добиться этого?

Вывод отладки:

 changed: [Parakoopa891F] => {
    "banners": {},
    "changed": true,
    "commands": [
        "interface Vlan 200",
        "description DMZ created by Ansible",
        "ip address 10.200.200.254 255.255.255.0",
        "ip nat inside",
        "ip virtual-reassembly",
        "zone-member security INSIDE",
        "no shutdown",
        "interface Loopback 30",
        "description Loopback created by Ansible",
        "ip address 172.30.69.254 255.255.255.0",
        "ip nat inside",
        "ip virtual-reassembly",
        "zone-member security INSIDE",
        "no shutdown"
    ],
    "invocation": {
        "module_args": {
            "after": null,
            "backup": false,
            "backup_options": null,
            "before": null,
            "defaults": false,
            "diff_against": null,
            "diff_ignore_lines": null,
            "intended_config": null,
            "lines": null,
            "match": "line",
            "multiline_delimiter": "@",
            "parents": null,
            "provider": null,
            "replace": "line",
            "running_config": null,
            "save_when": "never",
            "src": "interface Vlan 200n  description DMZ created by Ansiblen  ip address 10.200.200.254 255.255.255.0n  ip nat insiden  ip virtual-reassemblyn  zone-member security INSIDEn    no shutdownn  interface Loopback 30n  description Loopback created by Ansiblen  ip address 172.30.69.254 255.255.255.0n  ip nat insiden  ip virtual-reassemblyn  zone-member security INSIDEn    no shutdownn  "
        }
    },
    "updates": [
        "interface Vlan 200",
        "description DMZ created by Ansible",
        "ip address 10.200.200.254 255.255.255.0",
        "ip nat inside",
        "ip virtual-reassembly",
        "zone-member security INSIDE",
        "no shutdown",
        "interface Loopback 30",
        "description Loopback created by Ansible",
        "ip address 172.30.69.254 255.255.255.0",
        "ip nat inside",
        "ip virtual-reassembly",
        "zone-member security INSIDE",
        "no shutdown"
    ]
}
 

playbook.yml

 ---
- name: "Set Router Configuration"
  hosts: routers
  connection: network_cli
  tasks:
    - name: "Apply router config"
      ios_config:
        src: "templates/{{ vendor }}_template.j2"
      when: "'{{ vendor }}' == 'cisco'"
 

Шаблон Jinja2

 interface Vlan 200
  description {{ interfaces.vlans.dmz.description }}
  ip address {{ interfaces.vlans.dmz.ip }}
  ip nat {{ interfaces.vlans.dmz.nat }}
  ip virtual-reassembly
  zone-member security {{ interfaces.vlans.dmz.zone }}
  {% if 'up' in interfaces.vlans.dmz.status %}
  no shutdown
  {% else %}
  shutdown
  {% endif %}
interface Loopback {{ interfaces.loopbacks.test.number}}
  description {{ interfaces.loopbacks.test.description }}
  ip address {{ interfaces.loopbacks.test.ip }}
  ip nat {{ interfaces.loopbacks.test.nat }}
  ip virtual-reassembly
  zone-member security {{ interfaces.loopbacks.test.zone }}
  {% if 'up' in interfaces.loopbacks.test.status %}
  no shutdown
  {% else %}
  shutdown
  {% endif %}
 

Комментарии:

1. Я не могу сразу сказать, относится ли это к вам, но есть подозрительно актуальная запись часто задаваемых вопросов о всегда измененных задачах

2. Исправьте условие when: vendor == "cisco"

3. Попытался изменить синтаксис, но результат тот же. Способ, которым он указан в моем вопросе, все еще функционирует.