我的问题是,我无法通过传递要设置为环境的字典来设置整个剧本的环境。那可能吗?
例如,这是我的示例 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/