Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/amazon-s3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ansible 与_项目一起使用时,如何访问项目外部的变量?_Ansible - Fatal编程技术网

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: ...