我有一个用例,其中存在剧本的依赖性。我有一组主机要在所有计算机上启动应用程序,然后有另一组主机是实际计算机。
现在我的问题是,只有在成功执行第一个剧本并启动应用程序后,ansible才能运行第二个剧本(可以说更新软件包)吗?我在这里遇到的问题是,尽管第一个剧本没有成功并且应用程序没有启动,但第二个剧本仍在运行
在这里,我从拥有我所有机器许可的远程机器上启动应用程序,并且需要在每台机器上完成软件包的更新。因此,它们是彼此依赖的两个不同的剧本。
First playbook
hosts: A
tasks:
- name: check if app started and ready
command: x
Second Playbook
hosts: B
tasks:
- name: run y command from B machine to execute on A
command: y
这里的问题是第二本剧本不在乎命令X是否执行。一旦第一个剧本制作完成(无论成功与否,第二个剧本都将因为它们属于不同的机器而开始播放)
答案 0 :(得分:1)
如果剧本似乎彼此直接相关,那么我不会将它们分成不同的剧本,而是分成同一剧本中使用的角色。您需要在第一个角色的任务中的某个位置注册一个变量,以便可以在第二个角色中使用它:
- hosts: first-set
roles:
- { role: update-app } # registers update_was_good
- hosts: second-set
roles:
- update-packages
when: update_was_good