在Ansible

时间:2016-05-03 20:09:26

标签: ansible ansible-playbook

说我想要执行条件操作;到

  1. 检查是否更新了glibc库,如果是,请跳过以下步骤
  2. 停止mongodb
  3. 更新glibc
  4. 重启linux
  5. 到目前为止,我可以执行以下操作:

    - name: install updated glibc
      yum: name=glibc-2.12-1.166.el6_8.0.x86_64 state=present
      sudo: yes
      notify:
        - stop mongodb
        - restart vm
    

    我有处理程序来执行后续操作,但我想在更新glibc之前停止mongodb。如您所见,我无法执行所需的订单。

    我正在查看ansible文档和堆栈溢出板,但我找不到我想要的如何实现这一点。这能否在ansible中完成? ansible是否应该用于单个更新,例如这些?

    谢谢!

1 个答案:

答案 0 :(得分:0)

此处唯一的选择是先前比较版本。因此,您需要手动检查安装的版本以及应安装的版本,如果不同,请执行操作。这是我如何为git做过一次这样的例子,很快就为glibc重写了。它可能需要更多的工作,但应该知道如何做到这一点。

---

- name: Detect latest available glibc version
  shell: "`which yum` info glibc | grep Version | rev | cut -d' ' -f1 | rev"
  changed_when: false
  register: glibc_install_latest_version

- name: Detect currenty installed glibc version
  shell: "ldd --version | head -n 1 | cut -d' ' -f4"
  changed_when: false
  register: glibc_install_current_version

- name: Stop mongo!
  ...
  when: glibc_install_latest_version.stdout != glibc_install_current_version.stdout

- name: "Install latest version of glibc"
  yum:
    name: glibc
    state: latest
    update_cache: yes
  become: yes
  when: glibc_install_latest_version.stdout != glibc_install_current_version.stdout

...

重新启动仍然可以由您的处理程序触发。