我的播放列表包含以下内容
- 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"
,我将如何得到那些缺失的数字?
答案 0 :(得分:0)
您正在从某些命令打印标准输出,但我假设您知道预期的结果并将其存储在某个位置的变量中。为此,我将使用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') ) }}"
编辑根据您的评论,我提供了一个有关如何执行此操作的更可靠的示例。如果您要全心投入Ansible,则应尝试避免使用command
模块。希望这会有所帮助。
答案 1 :(得分:0)
尝试下面的代码(这是一个简单的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}}