ansible - Ansible 任务变量覆盖 set_fact 变量
问题描述
在我的 ansible 剧本中,我通过执行以下操作为所有剧本设置了一个变量:
set_fact:
domain_path: "{{ X.X.domain_path }}"
在剧本中,我的一项任务使用了一个角色,该角色需要一个与我在开始时定义的不同的 domain_path 变量
include_role:
name: role_X
vars:
domain_path: "/a/different/path"
当我尝试在角色之后的另一个块中使用 domain_path 时,它没有给我 set_fact 值,而是我不想要的任务值。
如果需要,我可以提供更多详细信息
解决方案
问:“任务变量覆盖 set_fact 变量”
A: task vars
(precedence 17) 在接下来的比赛中不能覆盖set_facts
(precedence 19)。请参阅变量优先级:我应该将变量放在哪里?. 查看角色。很可能role (and include_role) params
(优先级 20)覆盖该变量。
我无法重现该问题。我创建了一个只有单个任务的新角色
shell> cat roles/role_X/tasks/main.yml
- debug:
var: domain_path
剧本
shell> cat pb.yml
- hosts: localhost
tasks:
- set_fact:
domain_path: "X.X.domain_path"
- debug:
var: domain_path
- include_role:
name: role_X
vars:
domain_path: "/a/different/path"
- debug:
var: domain_path
按预期给出
shell> ansible-playbook pb.yml | grep domain_path
domain_path: X.X.domain_path
domain_path: /a/different/path
domain_path: X.X.domain_path
推荐阅读
- highcharts - Highcharts Boxplot - 当最小值和最大值为空类别时,不显示具有下四分位数、上四分位数和中位数的框
- ios - 在 Swift 中使用 RSA 证书进行加密
- mysql - 在 Hadoop 中使用 apache 气流配置 MySql 时面临的问题
- flutter - Flutter FirebaseMessaging 设置
- javascript - RxJS - 创建自动完成的 Observable,首先从缓存返回数据,然后从服务器返回
- javascript - 在 Cypress 中测试拖动传单地图
- android - 引起:java.lang.ClassCastException: kotlin.Unit 无法转换为 yodgorbek.komilov.musobaqayangiliklari.repository.NewsRepository?
- vb.net - 如何连续读写控制台窗口并将所有控制台数据记录到文本文件中
- reactjs - 是否可以在 Interface 中定义 render-prop 返回值的 jsx 树?
- python - Python:SettingWithCopyWarning