我的伪代码:
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 }}"
答案 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}
)来使该表达式的容忍度降低