2016-09-22 45 views
1

我創建了一個手冊,用於檢查是否在基於RHEL的服務器上使用「yum」Ansible模塊安裝了程序包,然後顯示結果。在ansible playbook中僅顯示yum列表中的某些字典值

我的任務如下;

角色/ LINUX/yumcheck /任務/ main.yml

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

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

    register: yumlist 
- debug: var=yumlist 

的劇本正確地輸出以下列格式的結果;

"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" 
      }, 

yum list模塊還會顯示「available」包。當使用包名稱(例如python)作爲多個可用包運行此playbook時,輸出可能變得非常冗長。我的目標是讓劇本僅輸出某些字典值(我相信它們被稱爲字典值)。

如何格式化結果以僅顯示諸如「狀態」(已安裝或未安裝)和軟件包名稱等潛在信息?

我嘗試以與使用括號或花括號顯示主機的事實相同的方式顯示信息,例如{{results.state}},但Ansible抱怨變量未定義。我一直無法在網上找到這個問題的類似例子。我的目標是簡單而乾淨地顯示是否安裝了軟件包列表,而沒有所有額外的臃腫信息。

感謝。

回答

2

使用map過濾器:

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

謝謝你,這個工作對我的需要。 – Avalon

+0

我注意到yum模塊正在返回一個狀態:幾乎安裝了所有的東西。例如,我在我的手冊中插入了「假冒包裝」。這個包顯然不存在,並且不可用。儘管如此,Ansible仍然會將狀態恢復爲「已安裝」狀態。 – Avalon

相關問題