Dictionary 如何使用传入的环境字典定义Ansible playbook环境
我的问题是,我无法通过传递要设置为环境的dict来为整个剧本设置环境。可能吗 例如,以下是我的ansible剧本示例: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 }}"
- 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也可能遵循本地主机上的快捷方式。你能试着注册一些“真实”动作模块的结果吗?例如,使用内容复制,并检查文件内容。