我已经有了一个可以根据需要在主机上运行的剧本。我遇到了问题而且我自己找不到答案。
我们有正在运行我们正在构建的应用程序的主机,并且有一些服务器没有自动完成更新。目标是在需要时通过ansible进行这些更新。问题是:如果在更新过程中重新启动主机,则需要执行其他步骤。但是,如果主机不重启,则需要省略这些步骤。
这里大致是yml文件的样子:
---
- name: run updates on demand
hosts: static-hosts
roles:
- update_system
- update_component1
- update_component2
我需要进行某种检查。如果上述步骤导致主机重新启动,请执行以下操作。如果它没有重启,只需停在这里。
- rebuild_component1
- rebuild_component2
有什么建议吗?我可能会认为这一切都是错的,如果是的话,如果我指出正确的方向,我会感激。谢谢!
考虑可能的解决方案,但尚未经过测试。由于它的重新启动(我原来的yml文件中没有列出),可能的一种方法是使用以下yml:
---
- name: run updates on demand
hosts: static-hosts
roles:
- update_system
- update_component1
- update_component2
register: updated
- name: reboot
shell: shutdown -r now
when: updated.changed
- name: wait for SSH
(usual "wait for ssh block")
- name: rebuild if rebooted
roles:
- rebuild_component1
- rebuild_component2
when: updated.changed
我不确定的是,如果更新需要,update.change实际上只会触发重启(因此重建)。
答案 0 :(得分:0)
上面列出的“可能的解决方案”有效。
答案 1 :(得分:-1)
您可以通过命令注册主机的正常运行时间并依赖于此。也许不是完美的解决方案,但我认为这可行。
- command: uptime
register: uptime