インストールされているすべてのyumパッケージをRHELマシンに取得しようとしています。べき等ではないシェルコマンドを使用して簡単に取得でき、代わりにyumコマンドを使用したいと思います。
シェルコマンドは正常に機能します:
- name: yum list packages
Shell: yum list installed > build_server_info.config
しかし、yumコマンドを使おうとすると、実行されるだけで結果が得られません。
- name: yum_command
action: yum list=${pkg} list=available
べき等ではないシェルコマンドを使用して簡単に取得できます
マシンの現在の状態をクエリしているときは、べき等について実際に話すことはできません。
「Idempontent」とは、特定のタスクを何度実行しても、タスクがマシンをdesired状態にすることを意味します。
現在の状態を照会するとき、目的の状態を記述しません。何をするにしても、どの方法を使用するにしても、「べき等」という用語は当てはまりません。
結果が得られない例については、同じ引数list
を2回繰り返したので、タスクは失敗するはずです(失敗しない、Ansibleの癖のように見えます)。
インストールされているパッケージのリストを取得するには、次を使用する必要があります。
- name: yum_command
yum:
list=installed
register: yum_packages
- debug:
var: yum_packages
各パッケージを説明する辞書のリストを変数yum_packages
に保存します。
次に、 JSONクエリフィルター を使用して単一のパッケージ(tar
)を取得できます。
- debug: var=item
with_items: "{{yum_packages|json_query(jsonquery)}}"
vars:
jsonquery: "results[?name=='tar']"
このような結果を得るには:
"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"
}
またはそのバージョンのみ:
- debug: var=item
with_items: "{{yum_packages|json_query(jsonquery)}}"
vars:
jsonquery: "results[?name=='tar'].version"
"item": "1.26"
Ansible 2.5以降、 package_facts
モジュール:インストールされているパッケージのリストをAnsibleファクトとして収集します。
ドキュメントからの例:
- name: get the rpm package facts
package_facts:
manager: rpm
- name: show them
debug: var=ansible_facts.packages
さて、 yum module
の公式Ansibleドキュメント はリストを次のように説明しています:
「プレイブックではなく/ usr/bin/ansibleで使用するためのさまざまな(べき等ではない)コマンド。」
したがって、べき等のlist
呼び出しを見つけるのは運が悪いでしょう。
changed
出力を抑制したいだけの場合は、 changed_when
パラメーターをFalse
に設定します 。
(また、list
パラメーターが重複しているのは疑わしいです。)