如何在Ansible中查找输出中缺少的数字



我的播放列表下面包含

- set_fact:
missnu={{out.stdout_lines}}
register: missnu
- debug: msg={{missnu}}

我的输出低于

TASK [debug] **********************
ok: [192.168.0.10] => {
"msg": [
"1 2 3 4"
]
}

这是意料之中的结果,但我想找到这个数字中缺少的。也就是说,如果结果是"1 2 4""2 3 4""2 4",我该如何获得这些缺失的数字?

试试下面的代码(这是一个简单的python代码(,它对我很有效。下面6是我设置的测试限制,你可以根据你的要求更改它。因此,通过此操作,您从out.stdout.lines获得的数字将从您设置的限制中删除(6或您想要的任何数字(,剩下的数字将显示出来。

- name: Getting Missing Numbers
shell: python -c "ma = {{ out.stdout_lines }}; num = [int(i) for i in ma[0].split()]; mn = list(set(range(1, 6 + 1)) - set(num)); print(mn)"
register: mynu
- debug: msg={{mynu.stdout}}

您正在从某个命令打印stdout,但我假设您知道预期的结果,并将其存储在某个变量中。为此,我将使用difference过滤器。

- hosts: localhost
vars:
sample_out_ml: [ 1, 2, 3, 4 ]
sample_out_sl: "1 2 3 4"
expected: [ 1, 2, 3 ,4 ,5 ]
tasks:
- name: Show difference when cmd outputs multi-line
debug:
msg: "{{ expected | difference(sample_out_ml) }}"
- name: Show difference when cmd outputs on single line
debug:
msg: "{{ expected | difference(sample_out_sl.split(' ') | map('int') ) }}"

EDIT根据你的评论,我提供了一个更有力的例子,说明你可以如何做到这一点。如果您完全使用Ansible,则应尽量避免使用command模块。希望这能有所帮助。

最新更新