Ansible配置:已执行Chrony重启服务时如何跳过重载源handler
Ansible配置:执行第一个Handler后跳过第二个Handler
你当前的Playbook包含两个Handler:重启Chrony服务、重载Chrony源,需求是当第一个Handler执行后,自动跳过第二个。可以通过设置标记变量+条件判断实现,具体修改如下:
修改后的完整Playbook
- name: 配置NTP hosts: jumphost become: true tasks: - name: 卸载不需要的时间同步工具 apt: state: absent name: - ntp - systemd-timesyncd - name: 安装Chrony apt: state=present name=chrony - name: 禁用Debian池服务器 lineinfile: path: /etc/chrony/chrony.conf regexp: '^pool.*' backrefs: true line: '#\g<0>' notify: - 重启Chrony服务 - 标记重载为跳过 - name: 配置示例NTP服务器 copy: dest: /etc/chrony/sources.d/example.sources owner: root group: root mode: 0644 content: | server ntp.example.de iburst notify: 重载Chrony源 handlers: - name: 标记重载为跳过 set_fact: skip_chrony_reload: true - name: 重启Chrony服务 service: name=chronyd state=restarted - name: 重载Chrony源 command: chronyc reload sources when: not skip_chrony_reload | default(false)
实现逻辑
- 新增标记Handler:添加
标记重载为跳过的Handler,作用是设置变量skip_chrony_reload为true,标记已执行过重启操作。 - 关联通知触发:在触发「重启Chrony服务」的任务中,同时通知这个标记Handler,确保重启操作触发时,标记变量会被设置。
- 添加执行条件:给「重载Chrony源」Handler加上
when条件,只有当skip_chrony_reload不为true时才执行(default(false)避免变量未定义时出现错误)。
这样设置后,只要「重启Chrony服务」被触发执行,标记变量就会生效,后续重载操作自动跳过;如果只有源文件修改的任务被触发,标记变量不存在,重载操作会正常执行。
内容的提问来源于stack exchange,提问作者ceving
相关产品推荐
相关产品推荐

