【问题标题】:Ansible: import_role doesn't expose variables to a playbookAnsible:import_role 不会将变量暴露给剧本
【发布时间】:2018-09-14 10:10:15
【问题描述】:

我的最终目标是使用用作常量的变量加载一些哈希(或字典)。一个专门的角色似乎非常适合这个目的,因为它可以在许多剧本中重复使用。 Ansible 文档中的Using Roles 章节说:

  • 如果 roles/x/vars/main.yml 存在,则其中列出的变量将添加到 play 中。

这意味着通过导入角色加载的变量应该在后续任务/角色的播放范围内可用。一切都很完美。

但我无法按预期工作(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

我做错了什么?

注意:我确实向角色添加了一个任务,只是为了检查变量是否在角色内部定义。对于我的场景,我不需要任何任务,只需要变量。

【问题讨论】:

    标签: ansible ansible-2.x ansible-role


    【解决方案1】:

    我做错了什么?

    没有错,Ansible import_roleinclude_role 目前是这样工作的:


    使用“遗留”角色声明:

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

    【讨论】:

    • 确实如此。没有考虑检查“遗留”方式。谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-11-24
    • 1970-01-01
    • 2018-04-13
    • 2011-09-07
    • 1970-01-01
    • 1970-01-01
    • 2010-12-01
    相关资源
    最近更新 更多