Fail ansible在并发异步任务失败时快速播放



我有一个可见的剧本(分成几个包括剧本),看起来有点像这样:

- name: Build packer images
<snip>
register: packer_run
async: 2700 # 45 minutes
poll: 0
- name: Do other stuff
<snip>
...
- name: Check Packer build finished
async_status:
jid: "{{ packer_run.ansible_job_id }}"
register: packer_result
until: packer_result.finished
retries: 30 # allow 15 mins
delay: 30

注意,异步任务集poll=0允许后续任务并发运行。然而,即使异步任务立即失败,也只有在完成后续任务并检查异步任务状态后才会失败。这真的很烦人,因为它可能需要30分钟才能发现异步任务在运行30分钟后失败。

是否有一种方法来保持并发行为,但有可能失败,只要异步任务失败?

我想最明显的答案是"不做ansible&quot的并发性;但由于这是在github动作工作流(不允许并发步骤)中运行,使用这种方法提供了一个合理的解决方案,除了这个"缓慢失败"。问题。

即使'Build packer images'任务立即失败,只有当'Check packer Build finished'到达时才检查任务的状态。或者'Build packer images'在一些文件中记录状态,其他任务读取它。

当我们需要检查状态时,我们可以保持"Check Packer build finished"。在剧本的不同点多次检查它。在任何情况下,如果没有人检查任务是否失败,将永远不会在可见控制台获得该信息。

最新更新