質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
yum

yumコマンドは、UNIX系OSのRPMパッケージのインストールなどを行うためのプログラムのことです。

Ansible

Ansibleは、Python で書かれたサーバーの設定を管理するための 構成管理ツールです。

Q&A

解決済

2回答

2160閲覧

Ansibleにてインストール済みのyumパッケージを取得したい。

退会済みユーザー

退会済みユーザー

総合スコア0

yum

yumコマンドは、UNIX系OSのRPMパッケージのインストールなどを行うためのプログラムのことです。

Ansible

Ansibleは、Python で書かれたサーバーの設定を管理するための 構成管理ツールです。

0グッド

0クリップ

投稿2022/03/01 08:21

Ansibleのplaybookを使用してサーバのインストール済みの特定のyumパッケージの取得をしたいと考えております。
取得のために、Ansibleのcommandモジュールを使用して取得を考えました。
そこで、下記のコマンドを手動で叩いて意図通りインストール済みの特定のパッケージを取得できることは確認しました。

yum list installed | grep xxxx

ただ、上記をAnsibleのcommandモジュールにて下記のように指定し、playbookを実行すると、意図通り取得ができませんでした。

tasks: - name : command: cmd: 'yum list installed | grep xxxx'

その他に、yumモジュールを使用して取得する方法も考えたのですが、インストール済みの特定のパッケージを取得する方法が分からず、解決ができていない状況です。

commandモジュールでyum list installedのみを指定した場合には、意図通り全てのインストール済みパッケージの取得には成功しましたが、Ansibleでyum list installed と grepは併せて使用出来ないのでしょうか?
また、commandモジュールもしくはyumモジュールを使用した最適な実現方法はありますでしょうか?
本件の解決方法がお分かりの方がいらっしゃいますとご教授頂けますと幸いです。
よろしくお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

↑の回答内でマークダウンが書けないのでこちらに書かせて頂きます。

複数の場合は、配列で指定しなければなりません。
詳しくは公式ドキュメントをご参照ください。

yaml

1name: [aaa, bbb]

または

yaml

1name: 2 - aaa 3 - bbb

ignore_errors: yesで解決されたということですが、本来はエラーがあってはならない場面でignore_errorを指定するとエラーを握りつぶしてしまいせっかくの冪等性も意味をなさなくなりますので利用する際はご注意ください。

投稿2022/03/01 12:53

comefigo

総合スコア1045

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ベストアンサー

Ansibleのplaybookを使用してサーバのインストール済みの特定のyumパッケージの取得をしたいと考えております。

冪等性的に考えると特定のパッケージがインストールされていることでもあるので、yumモジュールで良いかと思います。インストール済みのパッケージ一覧を取得してどうするかはわかりませんが、yumモジュールの実行結果でインストール済みかどうかもわかります。

yaml

1- yum: 2 name: 3 - jq 4 state: present 5 register: _test 6 7- debug: msg="{{ _test }}"

実行結果

json

1ok: [localhost] => { 2 "msg": { 3 "changed": false, 4 "failed": false, 5 "msg": "", 6 "rc": 0, 7 "results": [ 8 "jq-1.5-1.amzn2.0.2.x86_64 providing jq is already installed" 9 ] 10 } 11}

ちなみにcommandモジュールではパイプやリダイレクトは利用できないので、Shellモジュールをお使いください。

投稿2022/03/01 09:20

comefigo

総合スコア1045

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2022/03/01 09:53

comefigo様 ご回答頂きありがとうございます。 頂いた内容にて実行してみたところ、意図通りインストール済みのパッケージを取得することが出来ました! ありがとうございます! ただ、一点ご質問させてください。 複数のパッケージを取得する場合に、「name: aaaa, bbbb」と複数指定して実行したときに、aaaaが存在しない場合、bbbbの取得を行わず、処理を終了してしまいます。(taskを分けても同様の結果になりました。) こちらは、何か解決策などお分かりになりますでしょうか? 再度ご質問となり恐縮ですが、ご教授頂けますと幸いです。 よろしくお願いいたします。
退会済みユーザー

退会済みユーザー

2022/03/01 10:27

度々すみません。 上記の失敗すると処理が終了してしまうという問題ですが、「ignore_errors: yes」を指定することで、エラーをスキップして次の処理に進むことが出来ました! ご教授頂きありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問