Ansible 与_项目一起使用时,如何访问项目外部的变量?
我的角色将Ansible 与_项目一起使用时,如何访问项目外部的变量?,ansible,Ansible,我的角色将与\u项一起使用: - name: Create backup config files template: src: "config.yml.j2" dest: "/tmp/{{ project }}_{{ env }}_{{ item.type }}.yml" with_items: - "{{ backups }}" 我可以访问项。按常规键入,但不能访问在集合外部定义的项目或环境: deploy/main.yml - hosts: ... v
与\u项一起使用
:
- name: Create backup config files
template:
src: "config.yml.j2"
dest: "/tmp/{{ project }}_{{ env }}_{{ item.type }}.yml"
with_items:
- "{{ backups }}"
我可以访问项。按常规键入
,但不能访问在集合外部定义的项目
或环境
:
deploy/main.yml
- hosts: ...
vars:
project: ...
rails_env: qa
roles:
- role: ../../../roles/deploy/dolly
project: "{{ project }}"
env: "{{ rails_env }}"
backups:
- type: mysql
username: ...
password: ...
我得到的错误是:
错误是一条原始消息:在模板化“{project}”时发生未经处理的异常。
模板config.j2.yml,是:
type: {{ item.type }}
project: {{ project }}
env: {{ env }}
database:
username: {{ item.username }}
password: {{ item.password }}
事实证明,for无法重新定义与现有var同名的var,因此
project:{{{project}}
将始终失败并出现错误
相反,可以省略project
,并且可以使用vars
中的现有定义
- hosts: ...
vars:
project: ... # <- already defined here
roles:
- role: ../../../roles/deploy/dolly
backups:
- type: mysql
username: ...
password: ...
在两次定义相同的变量名时是否应该出现错误。一个用于定义和声明如何知道无法访问project或env;您收到了什么错误消息?此外,FWIW不需要在
角色:
项上重新声明项目
变量,因为角色将根据其在变量:
block@MatthewLDaniel我似乎无法使用project
,即使它是在顶级vars
中定义的,我得到了AnsibleUndefinedVariable:“dict object”没有属性“project”
。我觉得您遗漏了一些细节,因为我能够很好地呈现该模板,并且在您提供的代码中没有任何地方被project
作为属性引用;也许可以用整个故事更新您的问题,和/或包括任务和模板文件中引用的ansible playbook-vvv
project
。任务的-vvv
输出为
- hosts: ...
vars:
name: ...
roles:
- role: ../../../roles/deploy/dolly
project: "{{ name }}" # <- define here
backups:
- type: mysql
username: ...
password: ...