2017-07-15 4 views
1

Ich bin ein neuer Benutzer von Ansible und versuche zu sehen, wie ich eine Automatisierungsaufgabe mit Ansible durchführen kann. Ich möchte eine Verbindung zu mehreren Servern herstellen und eine Datei katalysieren, um eine Liste von Elementen zu erhalten (list_2). Ich möchte dann überprüfen, ob diese Liste von Elementen in einer anderen Liste (list_1) ist. Ich möchte dann eine Tabelle drucken, die zeigt, welche Elemente von list_2 sich in list_1 befinden? Gibt es eine Möglichkeit, dies über Ansible ohne ein Skript zu erreichen?Python Ansible Auswertung der Ausgabe der Aufgabe

Im Folgenden werden beide Listen gesammelt und in ein Register eingetragen, aber ich bin mir nicht sicher, wie ich bewerten kann, ob die Elemente in list_2 in list_1 enthalten sind.

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 

gewünschte Ausgabe:

list_1 list2inlist1 
red  No 
green Yes 
blue Yes 
orange No 
purple Yes 

Antwort

1

Hier ist etwas, das nah an Ihren gewünschten Ausgang eine Vorlage würde ich denken, bekommt

- name: print intersection 
    debug: 
    msg: "{{ item }}" 
    with_items: "{{ list_1.stdout.split(', ') }}" 
    when: item in list_2.stdout.split(', ') 

Wenn Sie wirklich die gleiche Syntax wie die gewünschten Ausgang wollen sei der einfachste Weg.

in Ihre Aufgaben:

- name: print intersection template 
    template: 
    src: intersection.j2 
    dest: /some_dir/intersection.txt 

in 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 %} 
Verwandte Themen