我有几个长时间运行的Ansible任务,其中SSH连接通常会在完成之前超时。任务需要按照剧本的指定顺序运行。
理想情况下,我想将剧本配置为一系列“即发即弃”任务,最后一项任务是完成所有事情的SNS通知。就像我一样,我想启动剧本,并能够关闭我的电脑(控制机器),让剧本继续在服务器上进行。
据我所知,唯一的方法是通过禁用轮询(以及长时间限制)使任务异步。但是,将任务设置为异步并没有用,因为我需要阻止任务执行,直到上一个任务完成。
我已经探索了注册变量,然后在下一个任务上设置when: variable.finished
,但这会导致跳过任务。我已经探索过wait_for
和block
,但这些似乎并不符合我的意图。
这可能吗?如果是这样,怎么样?
感谢。
答案 0 :(得分:0)
经过一番商议后,我认为我真正需要的是能够将整个剧本作为“即发即忘”的异步任务运行。
为此,我做了一个新的异步ansible任务,使服务器自己运行playbook,例如:
- hosts: server
tasks:
- name: Run a Playbook
command: ansible-playbook {{playbook}}
async: 3600
poll: 0
并修改原始剧本的主持人以使用localhost
(因为它现在正在运行)。