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_roleinclude_role 目前是这样工作的:


使用 "legacy" 角色声明:

- hosts: local
  roles:
    - constants
  tasks:    
    - debug:
        var: myvar