在编写和调试安塞尔剧本时,典型的工作流程如下:
ansible-playbook ./main.yaml
理想情况下,我想恢复执行失败的任务,有库存和所有事实收集以前的任务。这有可能吗?如何使剧本编写/调试更快?
看看 执行故障排除剧本。 如果你想开始执行你的剧本在一个特定的任务,你可以这样做与 --start-at-task选项:
--start-at-task
ansible-playbook playbook.yml --start-at-task="install packages"
以上操作将在一个名为 “安装软件包”的任务中开始执行您的剧本。
或者,看看前面的答案 如何在可行的剧本中只运行一个任务?
最后,当一部戏剧失败时,它通常会给你一些东西,大致如下:
PLAY RECAP ******************************************************************** to retry, use: --limit @/home/user/site.retry
使用该 --limit命令,它应该从失败的任务重试。
--limit
未来读者:
在这种情况下,--limit @/home/user/site.retry不会有帮助,.retry只存储失败的主机,仅此而已,因此只会对失败的主机执行所有任务。
--limit @/home/user/site.retry
.retry
如果您使用的是最新版本(Ansible2.x) ,则 --start-at-task不适用于 roles内部定义的任务。
roles
您可以通过使用 --step标志来达到类似的效果,例如: ansible-playbook playbook.yml --step。在执行每个任务之前,这个步骤会询问您,您可以选择 (N)o/(y)es/(c)ontinue。
--step
ansible-playbook playbook.yml --step
(N)o/(y)es/(c)ontinue
使用这种方法,您可以在需要时有选择地执行任务,也可以在修复之后从失败的地方继续执行任务。
从 Ansible2.4.2.0开始,--start-at-task可以用于我创建的角色中定义的任务。
有能力的团队不愿意解决这个问题他们建议你保持你的角色幂等,并重播整个发挥,我没有这个时间。在我的角色中,我没有使用大量像@JeremyWhiting 这样的事实,所以对我来说,我可以使用这个 --start-at-task特性。
然而,这仍然是一个手工任务,所以我写了一些可行的 rpm,并添加了一个“简历”功能,遵循以下基本步骤:
可操作的团队不愿意创建这个基本的(而且非常有用的)特性,因此唯一的选择就是通过一些 bash 脚本将其组合在一起。