ansible/ansible・脚本のバージョンを使用する方法、見つからない:私は使用してパッケージをインストールしようとしている2.1.2.0/2.2.0.0Ansibleレジスタ結果result.stdout result.rcなどdictの変数は、ループまで
yum/aptがありますが、パッケージをインストールするためのリポジトリがpackagecloud.ioに入っているため、エラーメッセージが表示されることがあります(私の不安プレイブックを実行しているときに-vvv
を渡しています)。
[Errno 14] curl#56 - \"TCP connection reset by peer\"\nTrying other mirror. ...some ansible verbose text here.. [Errno 256] No more mirrors to try.
これは常に発生するわけではありません。同じプレイブックをもう一度やり直すと正常に動作し、障害(接続リセット)がランダムに発生します。
この問題を解決するために、register
変数で使用するAnecessのuntil
ループを使用したかったのです。
until
ループhereを使用する方法についてはAnsibleのドキュメントを参照して作成しましたが、その構文を使用して、結果変数(登録済み)dictにキーがないという「辞書」エラーが表示されますstdoutという名前です。それから私はresult.rc(キーフィールド)を使用しようとしましたが、それはCentOSのマシン上で働いていたが、次のresult.rc dictの存在しないエラーでのUbuntu 14.xの信頼浮浪者のマシンに失敗しました:
- name: Install telegraf agent/collector (RedHat)
yum:
name: "{{ agent_collector }}"
state: "installed"
when: (ansible_os_family == 'RedHat' and company_install_collector == true)
register: result
until: result.stdout.find("Installed:") != -1
#The following works in CentOS/RedHat
#until: result.rc == 0
- debug: msg="result (redhat) = {{ result }}"
OR(アップデート明らかだった私の質問)
- name: Install Company Proxy (Ubuntu)
apt:
name: "{{ company_proxy_pkg }}"
state: "installed"
when: (ansible_distribution == 'Ubuntu' and company_install_proxy == true)
register: result
until: result.rc == 0
- debug: msg="result (ubuntu) = {{ result }}"
に次のエラーメッセージ(result.stdoutを取得する - のdictオブジェクトは、標準出力「は属性がありません 『』のRedHat/CentOSのとUbuntuの両方ではなく、辞書オブジェクトを取得しても属性がありません」RCを'Ubuntuサーバーのみ):
fatal: [localhost]: FAILED! => {"failed": true, "msg": "The conditional check '(result.stdout.find(\"Installed:\") != -1)' failed. The error was: error while evaluating conditional ((result.stdout.find(\"Installed:\") != -1)): 'dict object' has no attribute 'stdout'"}
と
fatal: [localhost]: FAILED! => {
"failed": true,
"msg": "The conditional check 'result.rc == 0' failed. The error was: error while evaluating conditional (result.rc == 0): 'dict object' has no attribute 'rc'"
}
ドキュメントは、私が上-vvv
冗長出力でそれらを見ることができれば、それらが存在しないか、と言うとき、レジスタ変数(結果、私の場合は)がstdout
またはrc
辞書/変数を持っていないのはなぜ1つのOSですが、他のOSには表示されませんか?
ありがとうございますが、私の質問は有効です。お返事をありがとうございます。 –
私は問題を見つけたと思う。結果変数の内容を絞り込むために 'ignore_errors:yes'を使い、次の' debug'文で結果変数の出力をすべて得ました。問題はこれです。 Ubuntuでは、result.rcはありませんが、result.stdoutがありますので、result.stdout.find( "...検索するテキスト")== 0またはいつかのように 'until'を使用できます。 RedHatでは少なくとも私が使用しているバージョンのものでは結果はありません.stdoutなので、上記の文を使うことはできませんので、until:result.rc == 0'を使う必要があります。それは答えですが、私はこれを証明するためにさらにテストが必要です。 –
Ubuntuのresult.stdoutは、アクションが成功した場合にのみ設定され、失敗したアクションに対しては結果に.stdout dictが設定されていないので、別のものを探す必要があります。 CentOSでは、Imは正常になったときにstdoutとrcを設定しますが、何らかの理由でそのアクションが失敗した場合には 'rc' dictしかステータス1でセットされません。 –