Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何从一个字典中检索一个值,该字典的键是ansible中的组变量集合_Ansible_Jinja2 - Fatal编程技术网

如何从一个字典中检索一个值,该字典的键是ansible中的组变量集合

如何从一个字典中检索一个值,该字典的键是ansible中的组变量集合,ansible,jinja2,Ansible,Jinja2,(ansible 2.5)我试图从名为docker_facts的字典中检索一个值,其中environment是组_vars中的一个变量集。我无法让它工作。我试过用双引号,也试过不用引号。有人有办法让它工作吗 meta_state: "{{ docker_facts['container_facts']['node']['/{{ environment }}/container1'] ['run_status']['inspect_status'] }}" 我得到的错误是: FAILED!

(ansible 2.5)我试图从名为docker_facts的字典中检索一个值,其中environment是组_vars中的一个变量集。我无法让它工作。我试过用双引号,也试过不用引号。有人有办法让它工作吗

meta_state:  "{{ docker_facts['container_facts']['node']['/{{ environment }}/container1'] ['run_status']['inspect_status'] }}"
我得到的错误是:

 FAILED! => {"msg": "The task includes an option with an undefined variable. The error was: 'dict object' has no attribute '/{{ environment}}/container1'\n\nThe ....
# 这是剪下来的头发

 {
    "docker_facts": {
        "container_facts": {
            "node": {
                "/dev/container1": {
                    "address": "12.x.x.x"
                    "monitor_rule": {
                        "monitor_templates": []
                        "type": "Snapshot"
                    },
                    "monitor_status": "Applied",
                    "name": "dev-server
                    "run_status": {
                        "inspect_status": "pass",
                        "enabled_status": "running",
                    },
                       "session_status": "ENABLED"
                },
                "/prod/container1": {
                    "address": "12.1.0.2",
                   ........
                   ........
以下是作为主机组变量位于组变量中的environments.yaml文件



环境:无法嵌套大括号。一旦你在大括号中有了代码,这段代码就会被解释为Jinja2,你可以在任何地方使用你的变量

要解决这个问题,只需使用不带引号的变量环境(带引号的是字符串,而不是变量)。在Jinja2中,还可以像Python中那样将变量与其他字符串连接起来:

meta_state:  "{{ docker_facts['container_facts']['node'][environment + '/container1'] ['run_status']['inspect_status'] }}"

你能分享
docker\u facts
environment
vars吗?@imjoseangel我在上面的原始问题中添加了docker\u facts的片段。我还添加了变量yaml文件。非常感谢。