首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在修正了剧本中的错误后,继续执行失败的任务?

如何在修正了剧本中的错误后,继续执行失败的任务?
EN

Stack Overflow用户
提问于 2015-04-27 15:37:05
回答 3查看 84.4K关注 0票数 74

编写和调试Ansible剧本时,典型的工作流如下:

  1. ansible-playbook ./main.yaml
  2. 剧本在某些任务上失败了
  3. 修复此任务并重复第1行,等待所有以前的任务再次执行。这需要很长时间

理想情况下,我希望继续执行失败的任务,有库存和以前的任务收集的所有事实。有可能吗?如何使剧本的编写/调试更快?

EN

回答 3

Stack Overflow用户

发布于 2015-04-28 06:11:06

看看执行用于故障排除的剧本。如果您想在特定任务中开始执行您的剧本,可以使用--start-at-task选项来执行:

代码语言:javascript
运行
复制
ansible-playbook playbook.yml --start-at-task="install packages"

以上内容将开始在一个名为“install”的任务中执行您的剧本。

或者,看一下前面的答案如何在“ansible剧本”中只运行一个任务?

最后,当一出戏失败时,它通常会给你一些大致如下的内容:

代码语言:javascript
运行
复制
PLAY RECAP ******************************************************************** 
           to retry, use: --limit @/home/user/site.retry

使用该--limit命令,它应该从失败的任务重试。

票数 65
EN

Stack Overflow用户

发布于 2017-08-04 11:47:43

未来读者:

在这种情况下,--limit @/home/user/site.retry不会有帮助,.retry只存储失败的主机,而不存储更多的内容,因此将只对失败的主机执行所有任务。

如果您使用的是最新版本(Ansible 2.x),则--start-at-task不适用于在roles中定义的任务。

您只需使用--step标志(例如:ansible-playbook playbook.yml --step )就可以达到类似的效果。该步骤在执行每个任务之前要求您继续执行,您可以选择(N)o/(y)es/(c)ontinue

使用这种方法,您可以在需要时选择性地执行任务,并且在修复之后,从失败点继续执行任务。

票数 27
EN

Stack Overflow用户

发布于 2018-12-05 22:02:31

未来读者:

从Anble2.4.2.0开始,--start-at-task适用于我创建的角色中定义的任务。

不可容忍的球队不愿意解决这个问题,他们建议你保持你的角色幂等,并重播整个剧本,我没有时间这样做。在我的角色中,我没有使用@JeremyWhiting这样的大量事实,所以对我来说,我可以使用这个--start-at-task特性。

然而,这仍然是一项手动任务,因此我编写了一些ansible rpm,并添加了一个“简历”功能,遵循以下基本步骤:

  • 通过/etc/ ansible /ansible.cfg (取消注释log_path)启用不可用日志
  • 每次运行前清除日志
  • 失败后,“简历”特性会为最后一个“任务”行查看此日志,并使用sed获取"[]“中的内容。
  • 然后简单地调用最后一次运行播放,并使用--start-at-task="$start_at_task“。
  • 确保您的角色中有"any_errors_fatal: true“,以便在您希望从

ansible团队不愿意创建这个基本的(并且非常有用)特性,所以唯一的选择就是通过一些bash脚本将它合并在一起。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29900096

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档