web-dev-qa-db-ja.com

Ansibleでインストールされたyumパッケージを取得するにはどうすればよいですか?

インストールされているすべての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
4
user_dev

べき等ではないシェルコマンドを使用して簡単に取得できます

マシンの現在の状態をクエリしているときは、べき等について実際に話すことはできません。

「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"
13
techraf

Ansible 2.5以降、 package_facts モジュール:インストールされているパッケージのリストをAnsibleファクトとして収集します。

ドキュメントからの例:

- name: get the rpm package facts
  package_facts:
    manager: rpm

- name: show them
  debug: var=ansible_facts.packages
2
sduthil

さて、 yum moduleの公式Ansibleドキュメント はリストを次のように説明しています:

「プレイブックではなく/ usr/bin/ansibleで使用するためのさまざまな(べき等ではない)コマンド。」

したがって、べき等のlist呼び出しを見つけるのは運が悪いでしょう。

changed出力を抑制したいだけの場合は、 changed_whenパラメーターをFalseに設定します

(また、listパラメーターが重複しているのは疑わしいです。)

0
Kyle