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

Dictionary 如何使用传入的环境字典定义Ansible playbook环境,dictionary,ansible,environment-variables,Dictionary,Ansible,Environment Variables,我的问题是,我无法通过传递要设置为环境的dict来为整个剧本设置环境。可能吗 例如,以下是我的ansible剧本示例: - hosts: localhost vars: env_vars: "{{ PLAY_ENVS }}" environment: "{{ env_vars }}" tasks: - name: Here is what you passed in debug: msg="env_vars == {{ env_vars }}"

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

例如,以下是我的ansible剧本示例:

- 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”

我现在无法验证它,但是带有查找插件的
调试
模块可能不是测试它的最佳方法。对于不同的目标,它甚至不建立连接,out也可能遵循本地主机上的快捷方式。你能试着注册一些“真实”动作模块的结果吗?例如,使用
内容
复制
,并检查文件内容。