我希望我们的专家社区成员之一可以帮助我解决这个让我发疯的可靠问题。 我有一个如下所示的服务器列表,它们很可能来自一个清单文件,我们将通过该文件运行剧本。
10.1.1.1
10.1.1.2
10.1.1.3
10.1.1.4
.....
我想采用一组完全不同的 IP,这些 IP 将是动态的,如下所示
10.1.16.1
10.1.16.2
10.1.16.3
10.1.16.4
.....
现在我需要遍历第一组 ips,比如 10.1.1。[14]并将其与 10.1.16.[14] 匹配具有给定计数的最后一个八位字节。基本上我需要输出看起来像下面
FirstSet 10.1.1.14 SecondSet 10.1.16.14
FirstSet 10.1.1.14 SecondSet 10.1.16.15
FirstSet 10.1.1.14 SecondSet 10.1.16.16
FirstSet 10.1.1.14 SecondSet 10.1.16.17
..Until Count..
我还需要 FirstSet 来匹配剧本所经过的同一主机。 到目前为止,我可以在同一行上正确地获得两个列表(这有很大的问题),但我需要弄清楚如何让两个集合匹配最后一个八位字节。 如果任何成员有任何建议或什至替代方法,将非常受欢迎,在此先感谢您。
---
- name: Servers list integration and iteration
hosts: all
gather_facts: no
tasks:
- name: Get hosts from host file
local_action: command cat hosts
register: firstset
- debug: msg=hostip {{ firstset.stdout_lines }}
- set_fact:
counthold: 9
startip: 10.1.16.14
- name: Setting fact for testing loop
set_fact:
secondset: "{{ lookup('pipe', '/bin/echo') + (((startip | ipaddr('int')) + item|int) | ipaddr | ipmath(-2) + ('/''24')) | ipaddr('next_usable') }}"
with_sequence: count={{counthold|int}}
register: testtest
- debug: var=testtest
- debug:
msg: "serverlist one {{ item.0 }} serverlist two {{ item.1.ansible_facts.ipmirange }}"
loop: "{{ serverlist.stdout_lines | zip(testtest.results) | list }}"