【发布时间】:2017-03-09 12:46:39
【问题描述】:
鉴于以下剧本:
---
- name: "foo bar"
hosts: localhost
connection: local
gather_facts: false
vars:
foo:
-
a: aa
b: bb
-
a: cc
b: dd
tasks:
- debug:
msg: " filter {{foo}} to {{ foo | json_query(query)}} "
vars:
bar: ['dd','ee']
query: "[?a == 'cc' && contains (['dd','ee'],b)]"
#query: "[?a == 'cc' && contains ( {{bar}} ,b)]"
我想将 ansible bar: ['dd','ee'] 中定义的变量传递给 jmes_path 查询,例如 "[?a == 'cc' && contains ( {{bar}} ,b)]"。不幸的是,这不起作用,脚本失败了。
致命:[本地主机]:失败! => {“失败”:真,“味精”:“该字段 “args”具有无效值 ([]),无法转换为 字典。错误是:期望:逗号,得到:文字:列解析错误 28、记号\"dd\" (LITERAL),用于表达式:\n\"[?a == 'cc' && contains ( [u'dd', u'ee'] ,b)]\"\n ^\n\n错误 似乎已经在 '/home/vagrant/testnew/lieferschein-deployment/stack.yml':第 16 行, 第 6 列,但可能\n位于文件中的其他位置,具体取决于确切的 语法问题。\n\n有问题的行似乎是:\n\n 任务:\n - 调试:\n ^ 这里\n"}
但是,在查询本身中定义列表,像"[?a == 'cc' && contains (['dd','ee'],b)]" 这样内联,它可以正常工作
TASK [debug] *******************************************************************
ok: [localhost] => {
"msg": " filter [{u'a': u'aa', u'b': u'bb'}, {u'a': u'cc', u'b': u'dd'}] to [{u'a': u'cc', u'b': u'dd'}] "
}
是否可以将 Ansible 变量放入查询中,如果可以,如何?
【问题讨论】: