Ansible:import_role 不会将变量暴露给剧本
Ansible: import_role doesn't expose variables to a playbook
我的最终目标是用用作常量的变量加载一些散列(或字典)。一个专门的角色似乎非常适合这个目的,因为它可以在许多剧本中重复使用。 Ansible 文档中的 Using Roles 章节说:
- If roles/x/vars/main.yml exists, variables listed therein will be added to the play.
这意味着通过导入角色加载的变量应该在后续 tasks/roles 的播放范围内可用。一切都完美。
但我无法让它按预期工作(Ansible 2.4.2):
$ ansible-playbook $HOSTS test.yaml
PLAY [local] **************************************
TASK [constants : debug] **************************
ok: [local] => {
"myvar": "myvar contents"
}
TASK [debug] **************************************
ok: [local] => {
"myvar": "VARIABLE IS NOT DEFINED!"
}
...
$ cat test.yaml
- hosts: local
tasks:
- import_role:
name: constants
- debug: var=myvar
$ cat roles/constants/vars/main.yml
myvar: myvar contents
$ cat roles/constants/tasks/main.yml
- debug: var=myvar
我做错了什么?
注意:我确实向角色添加了一个任务,只是为了检查变量是否在角色内部定义。对于我的场景,我不需要任何任务,只需要变量。
What am I doing wrong?
没有问题,Ansible import_role
和 include_role
目前是这样工作的:
使用 "legacy" 角色声明:
- hosts: local
roles:
- constants
tasks:
- debug:
var: myvar
我的最终目标是用用作常量的变量加载一些散列(或字典)。一个专门的角色似乎非常适合这个目的,因为它可以在许多剧本中重复使用。 Ansible 文档中的 Using Roles 章节说:
- If roles/x/vars/main.yml exists, variables listed therein will be added to the play.
这意味着通过导入角色加载的变量应该在后续 tasks/roles 的播放范围内可用。一切都完美。
但我无法让它按预期工作(Ansible 2.4.2):
$ ansible-playbook $HOSTS test.yaml
PLAY [local] **************************************
TASK [constants : debug] **************************
ok: [local] => {
"myvar": "myvar contents"
}
TASK [debug] **************************************
ok: [local] => {
"myvar": "VARIABLE IS NOT DEFINED!"
}
...
$ cat test.yaml
- hosts: local
tasks:
- import_role:
name: constants
- debug: var=myvar
$ cat roles/constants/vars/main.yml
myvar: myvar contents
$ cat roles/constants/tasks/main.yml
- debug: var=myvar
我做错了什么?
注意:我确实向角色添加了一个任务,只是为了检查变量是否在角色内部定义。对于我的场景,我不需要任何任务,只需要变量。
What am I doing wrong?
没有问题,Ansible import_role
和 include_role
目前是这样工作的:
使用 "legacy" 角色声明:
- hosts: local
roles:
- constants
tasks:
- debug:
var: myvar