如何从关键字为group_vars中设置的变量的字典中检索值

时间:2018-06-30 02:08:31

标签: ansible jinja2

(2.5版)我正在尝试从名为docker_facts的字典中检索一个值,其中环境是group_vars中设置的变量。我无法使它正常工作。我尝试使用双引号和不使用引号。有谁有办法使它正常工作? meta_state:“ {{docker_facts ['container_facts'] ['node'] ['/ {{环境}} / container1'] ['run_status'] ['inspect_status']}}” 我得到的错误是:  失败! => {“ msg”:“该任务包括带有未定义变量的选项。错误是:'dict object'没有属性'/ {{environment}} / container1'\ n \ n...。 # 这是抢夺的  {     “ docker_facts”:{         “ container_facts”:{             “节点”:{                 “ / dev / container1”:{                     “地址”:“ 12.x.x.x”                     “ monitor_rule”:{                         “ monitor_templates”:[]                         “ type”:“快照”                     },                     “ monitor_status”:“已应用”,                     “名称”:“开发服务器                     “ run_status”:{                         “ inspect_status”:“通过”,                         “ enabled_status”:“正在运行”,                     },                        “ session_status”:“已启用”                 },                 “ / prod / container1”:{                     “地址”:“ 12.1.0.2”,                    ........                    ........ 这是位于group-vars中的environment.yaml文件,作为主机组变量。 环境:dev

1 个答案:

答案 0 :(得分:0)

括号不能嵌套。将代码放在花括号中后,该代码将解释为Jinja2,您可以在任何地方使用变量。

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

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