如何配置playbook实现无需罗列注册变量仅当前置任务均无变更时运行指定任务
Ansible Playbook 无变更触发任务配置方案
你可以通过Ansible的block分组功能实现需求,不需要为组内每个任务单独注册变量,只需要给整个任务组注册一次运行结果即可。
配置逻辑
- 把需要监控的1-20号任务全部封装到同一个
block块中 - 给整个
block注册运行结果变量,块的changed属性会自动聚合所有子任务的变更状态:只要有一个子任务产生变更,该属性就为true,所有子任务都无变更时才为false - 配合块级错误控制,保证任意子任务运行失败时直接终止流程,不会走到后续触发任务
完整示例代码
- name: 无变更触发任务演示 hosts: your_hosts tasks: - name: 监控任务组(task1-task20) block: - name: task 1 # 替换为你的实际任务逻辑 ansible.builtin.yum: name: nginx state: present - name: task 2 ansible.builtin.copy: src: ./nginx.conf dest: /etc/nginx/nginx.conf mode: '0644' # 此处省略task3到task19的业务逻辑,按需添加即可 - name: task 20 ansible.builtin.service: name: nginx state: started enabled: yes # 给整个任务组注册运行结果,仅需注册一次 register: task_group_res # 组内任意任务失败直接终止,满足「全部运行成功」的前提 any_errors_fatal: true - name: 仅当task1-task20全部成功且无变更时运行的任务 # 替换为你的实际触发任务逻辑 ansible.builtin.debug: msg: "所有前置任务均无变更,触发当前任务执行" when: not task_group_res.changed
内容的提问来源于stack exchange,提问作者S P Arif Sahari Wibowo
相关产品推荐
相关产品推荐

