如何在Ansible中为多角色自动执行验证,避免重复when条件
解决方案
针对你的需求,有几种简洁的方式可以实现自动验证+无需每个任务加when条件的效果,以下是最实用的两种方案:
方案1:全局验证+角色级执行条件
这个方案让验证只执行一次,所有业务角色根据验证结果决定是否运行:
调整playbook,先执行validation角色
修改playbook.yaml,把validation放在所有业务角色之前:--- - name: Deployment hosts: cluster become: true gather_facts: true roles: - role: validation - role: user - role: os - role: reset ...给每个业务角色添加全局执行条件
给每个业务角色(如user、os)创建meta/main.yml文件,内容如下:--- when: debian | default(false)这样整个角色的所有任务只有在
debian为true时才会执行,不用给每个任务单独加when。
方案2:业务角色自动依赖验证
如果希望业务角色自带验证逻辑,不用在playbook里单独列validation,可使用角色依赖:
- 给每个业务角色添加依赖和全局条件
在每个业务角色的meta/main.yml中配置依赖和执行条件:
这样当业务角色被调用时,会自动先执行validation角色,且只有验证通过(--- dependencies: - role: validation when: debian | default(false)debian=true)时,业务角色的任务才会运行。
优化验证逻辑(可选)
为避免重复执行验证命令,可修改validation/tasks/main.yaml,仅在未验证过的主机上执行:
--- - name: Test model ansible.builtin.command: grep 'Debian' /proc/device-tree/model changed_when: false register: model when: debian is not defined - name: Set fact ansible.builtin.set_fact: debian: true when: model is defined and model.rc == 0
内容的提问来源于stack exchange,提问作者Floren
相关产品推荐
相关产品推荐

