Ansible Jinja模板配置和标准输出比较

时间:2018-09-18 19:10:38

标签: ansible ansible-template

我的伪代码:
1.从“ sh run”获取ntp服务器配置
2.将其存储到列表中
3. Jinja模板生成所需的配置。我正在通过-e(额外的变量)传递ntp_server IP。
4.从3中添加配置,比较3和4,然后删除其余部分。

我正在努力进行第4步[比较部分]。如何将当前配置与从Jinja模板生成的配置进行比较?我正在使用角色。

请告知。

# Jinja Template

    {% for ntp_srv in ntp_servers %}
    ntp server {{ ntp_srv }}
    {% endfor %}

# tasks file for ansible-ios-ntp
---
  - name: Current Edge servers before
    ios_command:
      commands:
        - sh run | include ntp server
    register: runconfser

  - debug:
      var: runconfser

  # NTP SECTION - START

  - name: Set NTP servers
    ios_config:
      src: ntprequired.j2
    notify: Save Config

  - name: Remove the rest NTP Servers
    with_items: "{{ runconfser.stdout_lines[0] }}"
    when: (item not in {src: 'ntprequired.j2'} and (item!=""))
    ios_config:
      lines:
        - "no {{ item }}"

1 个答案:

答案 0 :(得分:0)

如果我正确理解了您的问题,我相信您想从注册输出中提取当前IP,然后捕获不在ntp_servers列表中的IP:

  - set_fact:
     need_ips: |
        {{ ntp_servers | difference(stdout_lines | join(" ") | regex_findall('[0-9.]+')) }}

或者您也可以通过颠倒difference的顺序来获得“额外”的内容:

  - set_fact:
     extra_ips: |
        {{ stdout_lines | join(" ") | regex_findall('[0-9.]+') | difference(ntp_servers) }}

我只是通过搜索[0-9.]+来作弊,但是您当然可以通过更加具体(也称为[1-9](.[0-9.]){3})来使该表达式的容忍度降低