Python Ansible评估任务的输出

时间:2017-07-15 22:32:10

标签: python ansible task

我是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

1 个答案:

答案 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 %}