如何用传入的环境词典定义Ansible playbook环境
问题描述:
我的问题是,我无法通过传递字典来设置环境来设置整个剧本的环境。那可能吗?如何用传入的环境词典定义Ansible playbook环境
例如,这里是我的样本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
过程的上下文中执行的。利用查找插件"stdout": "foobar",
我现在不能验证,但'debug'模块:
你应该与衍生的过程中检查你的环境,这样的:
并获得预期的结果可能不是测试它的最好方法。对于不同的目标,它甚至不建立连接,也可能跟随本地主机上的快捷方式。你能否尝试注册一些“真实”行动模块的结果?例如用'content'复制'并检查一个文件的内容。 – techraf