Ansible 导入和包含角色在变量优先级方面的差异
我在Ansible 导入和包含角色在变量优先级方面的差异,ansible,Ansible,我在group\u vars/all.yml中定义了一个变量var\u all,在roles/./vars/main.yml中定义了另一个变量variables\u role\u var1。在剧本中使用import\u role和include\u role覆盖它们似乎遵循不同的优先规则,并产生不同的值 我假设第一个角色块将输出以下调试消息: "msg": "var_for_all = From group_vars/all.yml, variables_role_var1 = from rol
group\u vars/all.yml
中定义了一个变量var\u all
,在roles/./vars/main.yml
中定义了另一个变量variables\u role\u var1
。在剧本中使用import\u role
和include\u role
覆盖它们似乎遵循不同的优先规则,并产生不同的值
我假设第一个角色块将输出以下调试消息:
"msg": "var_for_all = From group_vars/all.yml, variables_role_var1 = from role vars/ dir"
但将输出作为:
"msg": "var_for_all = From playbook import_role_test2, variables_role_var1 = from role vars/ dir"
有人能解释一下我的行为吗?如果我遗漏了什么,能告诉我吗?
已经彻底检查过了,而且
我的剧本
- hosts: localhost
gather_facts: no
tasks:
- name: import_role_test1
import_role:
name: variables
tasks_from: precedence
- name: import_role_test2
import_role:
name: variables
tasks_from: precedence
vars:
var_for_all: From playbook import_role_test2
variables_role_var1: From playbook import_role_test2
- name: include_role_test3
include_role:
name: variables
tasks_from: precedence
vars:
var_for_all: From playbook import_role_test3
variables_role_var1: From playbook import_role_test3
我无法重现结果。请参阅该行下面的代码和结果
- 测试3的结果可以用“任务变量(仅针对任务)”的形式来解释
- 试验2的结果也可以用优先级17来解释。“任务变量(仅针对任务)”的定义
- 测试1中“变量\角色\变量1”的结果可以用优先级15来解释。“角色变量(在role/vars/main.yml中定义)”。我无法解释测试1中“var_for_all”的结果。这可能是Ansible的问题。第一个和第二个测试都导入角色,“Ansible在剧本解析期间预处理所有静态导入。”
给予
当主机显式扩展变量时,情况可能会发生变化
shell> cat roles/variables/tasks/precedence.yml
- set_fact:
var_for_all: "{{ var_for_all }}"
variables_role_var1: "{{ variables_role_var1 }}"
- debug:
msg:
- "{{ var_for_all }}"
- "{{ variables_role_var1 }}"
给予
我认为问题比较简单: 所有在初始化时运行的
import.*
语句和任何类型的vars
(*)也将被初始化,无论它是否存在失败条件或跳过实际执行的任何情况
(*)例如:vars/main.yml
导入任务的文件或import\u角色的vars
属性
- 一个非常简单的例子:
-调试:
变量:foo
-何时:假
导入用户角色:
姓名:任何职位
变量:
福:“樱桃”
- 结果是:
TASK [fun : debug] ******************************************************************
task path: roles/fun/tasks/main.yml:1
ok: [test.local] => {
"foo": "Cherry"
}
(这就是为什么我将“我的全部导入”角色替换为包含\u角色的原因)谢谢。你得到了我得到的确切结果。我认为存在一些问题。有关信息。显然,这是一个bug还是缺少文档还没有决定。我认为这是一个bug。在计算时,变量值的变化是不可接受的,例如,var\u for_all:“{{var\u for_all}}”
。请参阅更新的test2。有。
shell> cat roles/variables/tasks/precedence.yml
- set_fact:
var_for_all: "{{ var_for_all }}"
variables_role_var1: "{{ variables_role_var1 }}"
- debug:
msg:
- "{{ var_for_all }}"
- "{{ variables_role_var1 }}"
"msg": [
"From playbook import_role_test2",
"From roles/variables/vars/main.yml"
]
"msg": [
"From playbook import_role_test2",
"From roles/variables/vars/main.yml"
]
"msg": [
"From playbook import_role_test3",
"From playbook import_role_test3"
]
TASK [fun : debug] ******************************************************************
task path: roles/fun/tasks/main.yml:1
ok: [test.local] => {
"foo": "Cherry"
}