我正在运行一个用于部署节点的剧本。假设由于电源故障或其他异常之类的问题,执行某些任务后执行失败。因此,我尝试从失败的地方恢复执行,下次我运行剧本时。
从一开始就为所有任务运行剧本是很耗时的,是否有可能实现解决方案?
答案 0 :(得分:0)
您可以使用--start-at-task =“ task name”函数,它将从特定的任务名称运行整个剧本,并从此继续。但请注意,如果您之前在任务中注册了任何变量,然后再使用了它们,则从该任务开始不会注册它们,因此游戏将不会使用它们。在这种情况下,您可以将标记“始终”赋予注册变量的任务
答案 1 :(得分:0)
失败的ansible-playbook运行的输出实际上告诉您如何执行此操作(假设您在配置中将“ retry_files_enabled”设置为true,这是默认设置):
要重试,请使用:--limit @ / some / path / to / a / retry / file
在失败的情况下,Ansible将创建一个重试文件,该文件用于您所请求的特定目的。因此,只需将'--limit'语句附加到用于运行剧本的命令上,然后再次将其启动。
编辑:公平地说,您的控制机电源故障的具体情况不会在此范围内,但是Ansible处理的任何故障(即多数故障)都可以使用此方法。
答案 2 :(得分:0)
执行如下:
ansible-playbook --forks=10 myscript.yml --start-at-task='install java'
(限制为:ansible-playbook --forks=10 myscript.yml --limit limit1 --start-at-task='install java'