コンテクスト

コンテクスト

コンテクスト

最長 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 つのオプションがあります。

  1. 使用方法デフォルトのコールバックプラグインと を設定するdisplay_skipped_hosts = Falseshow_per_host_start = True、各タスクが開始されるたびに別のログ行が追加されますが、タイトルを時間どおりに出力するだけの動作は完全には復元されません (また、何らかの理由で、タスクがすでに完了した後に表示されることもあり、読みにくくなります)。
  2. 引き続き使用してください(現在は廃止されています)スキッピープラグインこれは、デフォルトのプラグインにスキップ機能が追加される前の定番プラグインです。2.11でも期待通りに動作し、この修正方法も私の推奨するものです。ansible.cfgstdout_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
# ...

参考文献:

答え4

私の場合は、タスクを終了する前にヘッダーが表示されない「無料」戦略を使用していました。

関連情報