1

在使用 ansible-playbook 管理 VPS 时,我有yum update使用yum模块运行的任务。问题是,VPS 最初是 CentOS 6.2,它会升级到 CentOS 6.5(这是我想要的),然后我想在这之后重新启动,因为有一些大的变化,我希望只有在一些之后才会发生很大的变化,因为我不想每次有一些不重要的包更新时都重新启动。

在ansible中,是否可以检测到这么大的变化,例如/etc/redhat-release会被改变yum update,如果发现大的变化则重新启动。

谢谢。

4

1 回答 1

0

是的,你可以尝试这样的事情:

---
- name: Reboot Server Playbook
  hosts: all
  user: ambot
  sudo: True


  tasks:

    - name: Do an upgrade
      command: yum upgrade -y

    - name: Check what the new version is
      shell:  lsb_release -r | awk '{print $2}'
      register: new_release

    - name: Reboot
      command: /sbin/reboot
      when: ansible_distribution_version != new_release.stdout

如果 CentOS 版本发生变化,以上将重新启动服务器。它还使用ansible_distribution_version您的剧本第一次运行时最初填充的 ansible 事实变量。在 yum upgrade 命令中添加 -y,因此进程不会卡在等待来自 ansible 的 stdin 确认。要查看本地主机上的 ansible 事实,您可以运行以下命令:

ansible localhost -m setup

[在剧本中重新生成事实的可能解决方案]

 # You can try this to store the initial version
 vars:
    current_os_version: $ansible_distribution_version


 tasks:

    - name: Regenerate facts ?
      setup: filter=*
于 2014-03-25T02:41:57.580 回答