如何在Ansible Role中指定渲染特定路由器配置模板
Ansible 按需指定渲染单类路由器配置实现方法
你可以通过任务条件判断+执行时传参的方式实现需求,不需要调整现有目录结构,改动量很小,具体操作如下:
1. 给Role内的渲染任务增加执行条件
修改roles/router/tasks/main.yaml文件,给两个模板生成任务分别添加when条件判断,只有匹配到指定变量为真时才执行对应任务:
--- - name: Generate 4331 configuration files template: src=4331-router.j2 dest=~/ansible/configs/{{item.hostname}}.txt with_items: "{{ routers_4331 }}" when: generate_4331 | default(false) | bool - name: Generate 881 configuration files template: src=881-router.j2 dest=~/ansible/configs/{{item.hostname}}.txt with_items: "{{ routers_881 }}" when: generate_881 | default(false) | bool
参数说明:
default(false):未传入对应变量时,默认判定为不执行该任务,避免运行报错bool:将传入的变量值强制转换为布尔类型,防止字符串格式的"false"被误识别为真值执行任务
2. 执行Playbook时传入参数指定渲染目标
运行ansible-playbook命令时,通过-e(额外变量参数)指定要生成的配置类型即可:
- 仅渲染4331型号路由器配置:
ansible-playbook site.yaml -e "generate_4331=true" - 仅渲染881型号路由器配置:
ansible-playbook site.yaml -e "generate_881=true" - 同时渲染两类路由器配置:
ansible-playbook site.yaml -e "generate_4331=true generate_881=true"
可选:兼容原有全量生成逻辑
如果希望不传任何参数运行时,保持原有生成全部配置的行为,只需要把上述when条件里的default(false)改成default(true)即可。此时默认执行所有渲染任务,如果需要单独排除某类配置,传参把对应变量设为false就行,比如仅生成4331配置可以执行:
ansible-playbook site.yaml -e "generate_881=false"
内容的提问来源于stack exchange,提问作者tony ramsey
相关产品推荐
相关产品推荐

