dictionary - 如何使用传入的环境字典定义 Ansible playbook 环境

标签 dictionary ansible environment-variables

我的问题是,我无法通过传递要设置为环境的字典来设置整个剧本的环境。那可能吗?

例如,这是我的示例 ansible playbook:

- hosts: localhost
  vars:
    env_vars: "{{ PLAY_ENVS }}"

  environment: "{{ env_vars }}"

  tasks:
    - name: Here is what you passed in
      debug: msg="env_vars == {{ env_vars }}"

    - name: What is FAKE_ENV
      debug: msg="FAKE_ENV == {{ lookup('env', 'FAKE_ENV') }}"

我正在传递命令:

/bin/ansible-playbook sample_playbook.yml --extra-vars '{PLAY_ENVS: {"FAKE_ENV":"/path/to/fake/destination"}}'

我得到的回复如下:

PLAY [localhost] ***************************************************************

TASK [setup] *******************************************************************
ok: [localhost]

TASK [Here is what you passed in] **********************************************
ok: [localhost] => {
    "msg": "env_vars == {u'FAKE_ENV': u'/path/to/fake/destination'}"
}

TASK [What is FAKE_ENV] ********************************************************
ok: [localhost] => {
    "msg": "FAKE_ENV == "
}

PLAY RECAP *********************************************************************
localhost                  : ok=3    changed=0    unreachable=0    failed=0

如您所见,环境中未设置“FAKE_ENV”。我做错了什么?

最佳答案

Ansible 中的查找是在父 ansible 进程的上下文中执行的。

您应该使用生成的进程检查您的环境,如下所示:

- hosts: localhost
  vars:
    env_vars:
      FAKE_ENV: foobar
  environment: "{{ env_vars }}"
  tasks:
    - name: Test with spawned process
      shell: echo $FAKE_ENV

并获得预期结果:"stdout": "foobar",

关于dictionary - 如何使用传入的环境字典定义 Ansible playbook 环境,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46433695/

相关文章:

Python 查询最旧日期列表

ios - ansible - 思科 IOS 和 "reload"命令

ansible - 在 Ansible Jinja 模板中,如何转义双引号内的单引号?

ansible - 如何在ansible list 文件中定义散列(dict)?

linux - 在 shell 脚本中传播值

node.js - 为什么以及如何将 secret 放入 Node.js 的环境变量中?

python - 如何从字典(python)中获取最高键?

python - 在 Python 中更新字典

python - 如何在新的 Python 进程中设置环境变量

python - 如何将 python dict 转换为标准形式的 geojson 文件?