Ansible 处理程序 - 独占重启或重新加载

问题描述 投票:0回答:2

我有许多 Ansible 角色,它们通知处理程序重新启动或重新加载 systemd 服务。如果通知重新启动,则显然不需要重新加载同一服务,并且尝试同时执行这两项操作可能会导致失败,因为重新启动后重新加载来得太快。有没有办法配置处理程序,以便仅在重新启动任务尚未运行时才触发重新加载任务?

下面是我当前的重启/重新加载处理程序的示例。

    - name: Restart foo service
      systemd:
        name: foo
        daemon_reload: yes
        state: restarted
      become: yes

    - name: Reload foo service
      systemd:
        name: foo
        daemon_reload: yes
        state: reloaded
      become: yes
ansible systemd
2个回答
14
投票

您可以从处理程序通知处理程序,这样您就可以实现您想要的,例如以这种方式(或使用逻辑运算符):

- name: Restart foo service
  set_fact:
    foo_state: restarted
  changed_when: true
  notify: Reload foo service

- name: Reload foo service
  systemd:
    name: foo
    daemon_reload: yes
    state: "{{ foo_state | default('reloaded') }}"
  become: yes

处理程序名称是一个偏好问题,我将它们保留原样。


0
投票

可能的解决方案是注册处理程序的状态并在

when
语句中使用它,因此您的示例将如下所示:

- name: Restart foo service
  systemd:
    name: foo
    daemon_reload: yes
    state: foo_restarted
  become: yes
  register: restarted

- name: Reload foo service
  systemd:
    name: foo
    daemon_reload: yes
    state: reloaded
  become: yes
  when: foo_restarted is not defined
© www.soinside.com 2019 - 2024. All rights reserved.