VagrantプロビジョナーをShellからansibleに変換していますが、各タスクを完了するのにかかる実際の時間を表示するオプションがあるかどうか疑問に思っていました。
理想的には、Shell:メソッドを使用してyumに複数のパッケージをインストールすることと、組み込みのyum:with_itemsメソッドを使用することの違いをベンチマークしたいと思います。 ATMストップウォッチを持ってここに座っていますが、正確な時刻が必要です。
コールバックプラグイン を追加することで、Ansibleタスク期間のタイミングを解決しました。コールバックプラグインは、Ansible実行のコンテキストで発生するイベントに基づいて独自の任意のコードを実行できるように設計されています。
私が使用するプラグイン は、callback_pluginsディレクトリを作成し、そこにpythonスクリプトをドロップすることで、簡単にデプロイできます。
プレイブックの実行が終了したときの出力のサンプルを次に示します。
PLAY RECAP ********************************************************************
npm_install_foo | Install node dependencies via npm ------------------- 194.92s
gulp_build | Run Gulp to build ----------------------------------------- 89.99s
nodejs | Update npm ---------------------------------------------------- 26.96s
common | Update apt cache and upgrade base os packages ----------------- 17.78s
forever | Install forever (restarts Node.js if it fails) --------------- 16.84s
nodejs | Node.js | Install Node.js and npm ----------------------------- 15.11s
bower | Install bower --------------------------------------------------- 9.37s
Copy locally fetched repo to each instance ------------------------------ 8.03s
express | Express | Install Express ------------------------------------- 8.00s
さらに、シェルコマンドtime
をansible-playbookの実行の前に追加します。これにより、個々のタスク期間がすべてうまく集計されます。
編集:
Ansible v2.0.0以降、この特定のプラグインにはAnsible自体が付属しています。 callback_whitelist = profile_tasks
ファイルに~/.ansible.cfg
を追加するだけです。
Ansibleはタイムスタンプをログに記録するので、それを使用できます。 ansible.cfgファイルを使用してこれをオンに切り替えることができます。
[defaults]
log_path = ./ansible.log
このような大雑把なことをすることもできます-次のようなプレイブックを作成します:
---
#
# Outputs a timestamp to the console
#
# Used for debugging/timing stuff.
#
- local_action: Shell date +'%F %T'
register: ts
Sudo: no
- name: Timestamp
debug: msg="{{ ts.stdout }}"
次に、タイムスタンプを出力する場所にinclude
します。