查看了解变量优先级。( play varsprecedence 12.) 不会覆盖role vars (defined in role/vars/main.yml)(precedence 15)。关于如何覆盖还有更多选项role vars。例如,使用role params(优先级 20)。请参阅在游戏级别使用角色
roles:
- role: userupdate
users:
- username: user1
is_sudo: false
笔记
这是如何在播放级别覆盖角色变量的唯一选项。其他选项(优先级 16、17、18、19)位于任务级别。
正确角色的目录vars不是var. 评论应该是# cat vars/main.yml [from userupdate role]。
变量users是一个列表。这也不应该即时更改。
该变量users将被覆盖而不是合并。
阅读使用 var #66610 时角色变量泄漏给其他角色中的注释。报价:
以下格式称为role params:
roles:
- role: foo
foo: bar
而以下是vars:
roles:
- role: foo
vars:
foo: bar
合并更新
如果要合并更新,请将结构更改为字典和combine通用和更新。例如
shell> cat roles/userupdate/vars/main.yml
users_common:
user1:
is_sudo: true
user2:
is_sudo: false
users: "{{ users_common|combine(users_update|default({})) }}"
shell> cat roles/userupdate/tasks/main.yml
- debug:
var: users
然后调用角色
roles:
- role: userupdate
users_update:
user1:
is_sudo: false
给
users:
user1:
is_sudo: false
user2:
is_sudo: false