我正在将vagrant provisioner从shell转换为ansible,我想知道是否有任何选项可以显示每个任务完成所需的实际时间?
理想情况下,我希望通过使用shell:方法和内置的yum:with_items方法在yum中安装多个软件包之间的差异进行基准测试。目前,我手动计时,但我需要准确的时间。
理想情况下,我希望通过使用shell:方法和内置的yum:with_items方法在yum中安装多个软件包之间的差异进行基准测试。目前,我手动计时,但我需要准确的时间。
我通过添加一个回调插件来解决了计算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
此外,我在ansible-playbook运行前加入shell命令time
。这样可以很好地聚合所有单个任务的持续时间。
编辑#1:
自Ansible v2.0.0起,此特定插件已随Ansible一起提供!只需在[defaults]
部分的~/.ansible.cfg
文件中添加callbacks_enabled = profile_tasks
即可。
编辑#2:自Ansible v2.1.5起,callback_whitelist
已弃用,改为使用callbacks_enabled
。
[defaults]
callbacks_enabled = profile_tasks
...
callback_whitelist = ...
这行代码应该放在 ansible.cfg
文件的 [defaults]
部分。 - MzzzzzzAnsible会在其日志中加入时间戳,因此您可以使用它。您可以通过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
它。只需在整个Ansible playbook的执行前加上time
。
确保您的shell:
脚本与yum:
模块执行相同的操作,例如更新缓存、下载文件等,而不是使用本地缓存等等。
使用yum:
的好处之一是,Ansible可以更好地处理安装失败,而不是像单片机一样盲目运行shell:
命令。
我认为差异将非常小(几分之一秒到2-3秒)。我想您需要多次运行基准测试才能得到统计上准确的结果。