[英]How to define an Ansible playbook environment with passed in environment dictionary
My problem is that I'm unable to set the environment for the entire playbook by passing in a dict to be set as the environment. 我的问题是,我无法通过传递要设置为环境的字典来为整个剧本设置环境。 Is that possible?
那可能吗?
For example, here is my sample 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') }}"
And I'm passing the command: 我正在传递命令:
/bin/ansible-playbook sample_playbook.yml --extra-vars '{PLAY_ENVS: {"FAKE_ENV":"/path/to/fake/destination"}}'
The response I'm getting is the following: 我得到的响应如下:
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
As you can see 'FAKE_ENV' is not being set in the environment. 如您所见,环境中未设置“ FAKE_ENV”。 What am I doing wrong?
我究竟做错了什么?
Lookups in Ansible are executed in a context of parent ansible
process. Ansible中的查找在父
ansible
进程的上下文中执行。
You should check your environment with a spawned process, like this: 您应该使用产生的过程来检查您的环境,如下所示:
- hosts: localhost
vars:
env_vars:
FAKE_ENV: foobar
environment: "{{ env_vars }}"
tasks:
- name: Test with spawned process
shell: echo $FAKE_ENV
And get expected result: "stdout": "foobar",
并得到预期的结果:
"stdout": "foobar",
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.