我是Ansible的新用户,我正在尝试了解如何使用Ansible执行自动化任务。我想连接到几个服务器并cat一个文件来获取项目列表(list_2)。然后,我想检查该项目列表是否在另一个列表中(list_1)。我想打印一个表格,显示list_2中的哪些项目在list_1中?有没有办法通过Ansible实现这一点而无需推送脚本?
下面收集两个列表并将它们放入寄存器但我不确定如何评估列表_2中的项目是否包含在list_1中。
list_1 = 'red, green, yellow, blue, orange, purple'
list_2 = 'green, blue, purple'
hosts: myhost
tasks:
- name: get list 1
shell: "cat /dir/list_1"
register: list_1
tasks:
- name: get list 2
shell: "cat /dir/list_2"
register: list_2
期望的输出:
list_1 list2inlist1
red No
green Yes
blue Yes
orange No
purple Yes
答案 0 :(得分:1)
这里有一些能够接近你想要的输出的东西
- name: print intersection
debug:
msg: "{{ item }}"
with_items: "{{ list_1.stdout.split(', ') }}"
when: item in list_2.stdout.split(', ')
如果你真的想要与你想要的输出相同的语法,我认为模板是最简单的方法。
在你的任务中:
- name: print intersection template
template:
src: intersection.j2
dest: /some_dir/intersection.txt
在intersection.j2:
list1 list2inlist1
{% for item in list_1.stdout.split(', ') %}
{% if item in list_2.stdout.split(', ') %}
{{ item }} YES
{% else %}
{{ item }} NO
{% endif %}
{% endfor %}