2016-09-22 1 views
1

Ich habe ein Playbook erstellt, das prüft, ob ein Paket auf einem RHEL-basierten Server mit dem "yum" -Ansible-Modul installiert ist und dann die Ergebnisse anzeigt.Nur bestimmte Wörterbuchwerte aus der yum-Liste in ansible playbook anzeigen

Meine Aufgabe ist wie folgt;

Rollen/Linux/yumcheck/Aufgaben/main.yml

- name: Check for installed packages 
    yum: list={{ item.package }} 

    with_items: 
    - { package: 'package1' } 
    - { package: 'package2' } 
    - { package: 'package3' } 

    register: yumlist 
- debug: var=yumlist 

Das Textbuch korrekt gibt die Ergebnisse in dem folgenden Format;

"results": [ 
     { 
      "_ansible_item_result": true, 
      "_ansible_no_log": false, 
      "changed": false, 
      "invocation": { 
       "module_args": { 
        "conf_file": null, 
        "disable_gpg_check": false, 
        "disablerepo": null, 
        "enablerepo": null, 
        "exclude": null, 
        "install_repoquery": true, 
        "list": "python", 
        "name": null, 
        "state": "installed", 
        "update_cache": false, 
        "validate_certs": true 
       }, 
       "module_name": "yum" 
      }, 
      "item": { 
       "package": "python" 
      }, 

Das yum-Listenmodul zeigt auch "verfügbare" Pakete an. Wenn Sie dieses Playbook mit einem Paketnamen (z. B. Python) ausführen, der mehrere verfügbare Pakete enthält, kann die Ausgabe sehr lang werden. Mein Ziel ist, dass das Playbook nur bestimmte Wörterbuchwerte ausgibt (ich glaube, sie werden als Wörterbuchwerte bezeichnet).

Wie kann ich die Ergebnisse so formatieren, dass nur relevante Informationen wie "Status" (installiert oder nicht) und der Name des Pakets angezeigt werden?

Ich habe versucht, die Informationen auf die gleiche Weise anzuzeigen, wie Sie Fakten über einen Host mit Klammern oder geschweiften Klammern anzeigen würden, zum Beispiel {{results.state}}, aber Ansible beschwerte sich über die Variable nicht definiert. Ich konnte ähnliche Beispiele dieser Frage online nicht finden. Mein Ziel ist es, einfach und sauber anzuzeigen, ob eine Liste von Paketen installiert ist oder nicht, ohne all die zusätzlichen Daten.

Danke.

Antwort

2

Verwendung map Filter:

- debug: msg="{{ yum_list.results | map(attribute='invocation.module_args.state') | list }}" 
+0

Danke, arbeitete dies für meine Bedürfnisse. – Avalon

+0

Ich habe bemerkt, dass das Yum-Modul einen Zustand zurückgibt: installiert für so ziemlich alles. Zum Beispiel habe ich "some-fake-package" in mein Playbook eingefügt. Dieses Paket existiert offensichtlich nicht und wäre nicht verfügbar. Ansible gibt jedoch den Status als "installiert" zurück. – Avalon

Verwandte Themen