2017-01-09 9 views
3

Ich versuche, das gesamte installierte yum-Paket auf einer RHEL-Maschine zu installieren. Ich kann es leicht mit Shell-Befehlen durchgehen, die nicht idempotent sind und stattdessen den yum-Befehl verwenden möchten.Wie bekomme ich die installierten yum-Pakete mit Ansible?

Shell-Befehl funktioniert:

- name: yum list packages 
    shell: yum list installed > build_server_info.config 

Aber wenn ich versuche, das yum-Befehl zu verwenden, führt er nur, aber geben keine Ergebnisse:

- name: yum_command 
    action: yum list=${pkg} list=available 

Antwort

9

ich es einfach durch Verwendung von Shell-Befehle erhalten können, die nicht

Sie können über idempotence nicht wirklich reden ist idempotent, Wenn Sie Abfrage der aktuelle Zustand einer Maschine sind.

"Idemontent" bedeutet, dass die Aufgabe sicherstellen wird, dass die Maschine im Zustand ist, egal wie oft Sie eine bestimmte Aufgabe ausführen.

Wenn Sie den aktuellen Status abfragen, beschreiben Sie nicht den gewünschten Status. Egal, was Sie tun, welche Methode Sie verwenden, der Begriff "idempotent" ist einfach nicht anwendbar.


In Bezug auf Ihr Beispiel, die Sie nicht Ergebnisse nicht geben - Sie haben list zweimal das gleiche Argument wiederholt, und die Aufgabe scheitern sollte (dies nicht der Fall, was wie ein ansible Marotte aussieht).

, um eine Liste der installierten Pakete zu bekommen, sollten Sie verwenden:

- name: yum_command 
    yum: 
    list=installed 
    register: yum_packages 

- debug: 
    var: yum_packages 

Es spart eine Liste der Wörterbücher jedes Paket auf eine Variable yum_packages beschreibt.

Sie können dann eine JSON Query Filter verwenden, um ein einzelnes Paket (tar) zu erhalten:

wie diese
- debug: var=item 
    with_items: "{{yum_packages|json_query(jsonquery)}}" 
    vars: 
    jsonquery: "results[?name=='tar']" 

zu erhalten ein Ergebnis:

"item": { 
    "arch": "x86_64", 
    "epoch": "2", 
    "name": "tar", 
    "nevra": "2:tar-1.26-31.el7.x86_64", 
    "release": "31.el7", 
    "repo": "installed", 
    "version": "1.26", 
    "yumstate": "installed" 
} 

oder seine Version nur:

- debug: var=item 
    with_items: "{{yum_packages|json_query(jsonquery)}}" 
    vars: 
    jsonquery: "results[?name=='tar'].version" 
"item": "1.26" 
+0

Dank @ Techraf. Das sieht gut aus. –

0

Nun, beschreibt die official Ansible documentation for the yum module Liste als:

"Verschiedene (nicht idempotente) Befehle zur Verwendung mit/usr/bin/ansible und nicht Playbooks."

so werden Sie kein Glück mit der Suche nach einer idempotenten list Invocation sein.

Wenn Sie nur den changed Ausgang unterdrücken möchten, set the changed_when parameter to False.

(Auch ist das Duplikat list Parameter mit verdächtig.)

+0

Dies wird wieder der gleiche Ansatz Shell-Modul verwenden. –

+0

Ja. Gehen Sie mit der Lösung von techraf, es hat die zusätzliche "Register" -Aktion, die ich komplett vermisst habe. – Kyle

Verwandte Themen