コンテクスト
最長 1 時間にも及ぶ非常に長いタスクを含む Ansible プレイブックがあります。
非常に簡略化すると、次のようになります。
- hosts: localhost
tasks:
- name: Short task
debug:
msg: "I'm quick!"
- name: Long task
shell: "sleep 15s"
ユーザーがプレイブックを実行すると、最初は次の出力が表示されます。
PLAY [localhost] ********************
TASK [Gathering Facts] **************
ok: [127.0.0.1]
TASK [Short task] *******************
ok: [127.0.0.1] => {
"msg": "I'm quick!"
}
(hang there until Long task is done)
TASK [Long task] ********************
changed: [127.0.0.1]
問題
Short task
プレイブックのエンド ユーザーは、プレイブックがそこでハングしているために、Long task
遅延の原因となっている問題があると考えています。
質問
定義されたヘッダーを印刷するためにAnsibleまたはプレイブックをどのように設定すればよいでしょうか?name:
前にタスクを実行しますか?
私が達成したいのは次のような出力です:
PLAY [localhost] ********************
TASK [Gathering Facts] **************
ok: [127.0.0.1]
TASK [Short task] *******************
ok: [127.0.0.1] => {
"msg": "I'm quick!"
}
TASK [Long task] ********************
(and hang there during the execution)
changed: [127.0.0.1]
答え1
OP のリクエストに応じてコメントを回答に移行する
Ansible 2.9.2 を使用しています。
設定ファイルなしで試し、設定ファイルで値が宣言されていない状態stdout_callback
(デフォルト) で試しました。どちらの場合も問題を再現できません。
これは私のテストプレイブックです:
---
- hosts: localhost
gather_facts: false
tasks:
- name: Short running
debug:
msg: I'm a short task
- name: LOOOOOOOOOng task
shell: sleep 2000
そして結果(どちらの場合も。注:タスク ヘッダーの表示後にユーザーによる中断)
$ ansible-playbook /tmp/play.yml
PLAY [localhost] **************************************************************************************************************************************************************************************************
TASK [Short running] **********************************************************************************************************************************************************************************************
ok: [localhost] => {
"msg": "I'm a short task"
}
TASK [LOOOOOOOOOng task] ******************************************************************************************************************************************************************************************
^C [ERROR]: User interrupted execution
プレイブックを起動するディレクトリで、どの構成ファイルをロードしているかを再確認してくださいansible-playbook --version
。また、構成ファイルなしで試してみて、問題が解決するかどうか確認することをお勧めします (その後、実際に問題の原因となっている設定を確認してください)。
OPのコメントから追加: この特定のケースでは、ansible.cfgで問題となる設定はdisplay_skipped_hosts=False
答え2
/etc/ansible/ansible.cfgdisplay_skipped_hosts=false
で修正されました。
これはバグでしょうか? スキップされたホストは表示されませんが、プレイブックの進行状況は表示したいです。
Ansible 2.10.3 の使用
答え3
スキップしたタスクを非表示にしたい場合は、次の 2 つのオプションがあります。
- 使用方法デフォルトのコールバックプラグインと を設定する
display_skipped_hosts = False
とshow_per_host_start = True
、各タスクが開始されるたびに別のログ行が追加されますが、タイトルを時間どおりに出力するだけの動作は完全には復元されません (また、何らかの理由で、タスクがすでに完了した後に表示されることもあり、読みにくくなります)。 - 引き続き使用してください(現在は廃止されています)スキッピープラグインこれは、デフォルトのプラグインにスキップ機能が追加される前の定番プラグインです。2.11でも期待通りに動作し、この修正方法も私の推奨するものです。ansible.cfg
stdout_callback = skippy
で設定してください。念のため、プラグインをホワイトリストに追加しました。callback_enabled = ansible.posix.skippy
私の ansible.cfg は現在このようになっています。デフォルトで最新の ansible.cfg に移行する前と同じように、すべて動作します。
[default]
# ...
stdout_callback = skippy
# if you had other plugins here just add to list, comma seperated
callback_enabled = ansible.posix.skippy
# deprecated flag, sometimes still needed, hence I always set both
callback_whitelist = ansible.posix.skippy
# ...
参考文献:
- 問題に関するチケット:参考:
- デフォルトのプラグインに開始タスク出力を追加する機能を導入したPRhttps://github.com/ansible/ansible/pull/53819
- デフォルトプラグインの最新ドキュメントデフォルトのコールバックは、次の URL から入手できます。
- skippyプラグインの最新ドキュメントコールバックのカスタマイズ
- コールバックプラグインの設定方法コールバック
答え4
私の場合は、タスクを終了する前にヘッダーが表示されない「無料」戦略を使用していました。