0

我的剧本(test.yml)如下所示:

- hosts: localhost
  connection: local
  gather_facts: false

  roles:
    - env

  environment:
      AWS_ACCESS_KEY_ID: "{{ access }}"

  tasks:

    - debug:
        msg: "Hello"

我收到以下错误:

任务 [env : 加载 VPC 变量文件] ***************************************** ****************************************************** *************致命:[本地主机]:失败!=> {"failed": true, "msg": "'environment' 字段的值无效,似乎包含未定义的变量。错误是:'access' is undefined\n\n错误似乎是已在“/var/yogesh/test/roles/env/tasks/main.yml”中:第 1 行第 3 列,但可能\n在文件中的其他位置,具体取决于确切的语法问题。\n\n出现问题的行为:\n\n\n- 名称:加载 VPC 变量文件\n ^ here\n"}

播放回顾 ************************************************ ****************************************************** ************************************ 本地主机:正常=0 更改=0 无法访问=0
失败=1

我的角色(roles/env/tasks/main.yml)如下:

- name: Load VPC variables file
  include_vars: "vault.yml"

vault.yml看起来像:

access: 1234

test.yml并且vault.yml在同一个目录中。

现在,如果我像下面这样更改剧本test.yml,它会以某种方式起作用。

- hosts: localhost
  connection: local
  gather_facts: false
  vars_files:
     - vault.yml

  environment:
      AWS_ACCESS_KEY_ID: "{{ access }}"

  tasks:

    - debug:
        msg: "Hello"

我不确定为什么会这样。有人可以解释一下吗?我们是否必须仅在 vars_files 中声明 Vault 文件?有没有更好/最佳实践的选择?

Ansible 版本:2.3.0.0

4

1 回答 1

1

代码没问题,错误在 2.3.0.0 中很容易重现。

解决方案:停止使用过时的 Ansible 版本。如果你真的必须使用 2.3.x,请使用Ansible 2.3.2

于 2017-11-06T13:39:29.450 回答