ansible仅在主机重新启动时执行其他操作

时间:2016-04-06 12:40:59

标签: linux ansible ansible-playbook

我已经有了一个可以根据需要在主机上运行的剧本。我遇到了问题而且我自己找不到答案。

我们有正在运行我们正在构建的应用程序的主机,并且有一些服务器没有自动完成更新。目标是在需要时通过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实际上只会触发重启(因此重建)。

2 个答案:

答案 0 :(得分:0)

上面列出的“可能的解决方案”有效。

答案 1 :(得分:-1)

您可以通过命令注册主机的正常运行时间并依赖于此。也许不是完美的解决方案,但我认为这可行。

- command: uptime
  register: uptime