我创建了两个任务来获取以下两个输出:
第一输出:
NAME STATUS ROLES AGE VERSION
calico-node-432fv Ready master 146d v1.18
calico-node-24dfv Ready master 146d v1.18
calico-node-4kvnd Ready master 146d v1.18
calico-node-6dvcr Ready worker 146d v1.18
calico-node-8ldmw Ready worker 146d v1.18第二输出:
Transaction ID: xxxx-xxxx-xxxxx-xxxxxx
bootstrap.xx.xxx.xxx.com
calico-node-432fv
calico-node-24dfv
calico-node-4kvnd
calico-node-6dvcr
calico-node-8ldmw 现在,如何比较存储在寄存器和打印PASSED中的上述2个输出,如果NAME(来自第一个输出,意味着只有来自第一列的节点)与第二个输出匹配?注意:我们需要忽略第二个输出的前2行
我正在考虑通过逻辑(第一个输出的长度-第二个输出的1 ==长度-2)来完成这个任务,但是我不确定如何将它转换成一个ansible剧本。非常感谢您的建议和意见,以实现这一目标。
发布于 2021-08-10 09:16:16
给定分别存储在变量reg1和reg2中的已注册输出,将reg1.splitlines()行拆分。通常,注册的输出存储在属性stdout中,属性stdout_lines保持自动拆分行。用任何对你更方便的东西。
选择节点
- debug:
msg: "{{ l1 }}"
vars:
l1: "{{ reg1.splitlines()|
select('match', '^calico-node-.*$')|
map('regex_replace', '^(.*?) (.*)$', '\\1')|
sort }}"给出
msg:
- calico-node-24dfv
- calico-node-432fv
- calico-node-4kvnd
- calico-node-6dvcr
- calico-node-8ldmw可以使用相同的过滤器从第二寄存器中选择节点。当您有两个列表时,请使用筛选器差异来比较这些项。
- debug:
msg: "{{ l1|symmetric_difference(l2) }}"
vars:
l1: "{{ reg1.splitlines()|
select('match', '^calico-node-.*$')|
map('regex_replace', '^(.*?) (.*)$', '\\1')|
sort }}"
l2: "{{ reg2.splitlines()|
select('match', '^calico-node-.*$')|
map('regex_replace', '^(.*?) (.*)$', '\\1')|
sort }}"提供空列表,因为节点列表是相同的。
msg: []您可以在此条件下使用此列表的长度。
- debug:
msg: PASSED
when: l1|symmetric_difference(l2)|length == 0
vars:
l1: "{{ reg1.splitlines()|
select('match', '^calico-node-.*$')|
map('regex_replace', '^(.*?) (.*)$', '\\1')|
sort }}"
l2: "{{ reg2.splitlines()|
select('match', '^calico-node-.*$')|
map('regex_replace', '^(.*?) (.*)$', '\\1')|
sort }}"给出
msg: PASSED如果您想要比较行数,那么只有下面的任务才能完成任务。
- debug:
msg: PASSED
when: (reg1.splitlines()|length - 1) ==
(reg2.splitlines()|length - 2)https://stackoverflow.com/questions/68723289
复制相似问题