如何将Ansible变量传递给JMESPath查询?
鉴于以下剧本:如何将Ansible变量传递给JMESPath查询?,ansible,jmespath,Ansible,Jmespath,鉴于以下剧本: --- - 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(q
---
- 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)]"
我想将ansiblebar:['dd','ee']
中定义的变量传递给jmes_路径查询,如“[?a='cc'&&contains({bar},b)]”
。不幸的是,这不起作用,脚本失败
致命:[localhost]:失败!=>{“failed”:true,“msg”:“字段”
“args”的值([])无效,无法转换为
dict.错误为:在列处应为:逗号,get:literal:Parse错误
28,标记\“dd\”(文字),用于表达式:\n \“[?a=='cc'&&contains
([u'dd',u'ee'],b)]\“\n^\n\n错误
似乎在
“/home/vagrant/testnew/lieferschein部署/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变量放入查询,如果可以,如何将其放入查询?更改:
bar: ['dd','ee']
致:
否则它被定义为一个对象,但您需要一个字符串
如果您已经定义了一个列表,您需要进行检查,找到一个合适的过滤器并修改它以满足您的需要: 要将列表连接到字符串中,请执行以下操作:
{{ list | join(" ") }}
更改:
bar: ['dd','ee']
致:
否则它被定义为一个对象,但您需要一个字符串
如果您已经定义了一个列表,您需要进行检查,找到一个合适的过滤器并修改它以满足您的需要: 要将列表连接到字符串中,请执行以下操作:
{{ list | join(" ") }}
这是可行的,但在真正的剧本中,我想使用在其他地方定义的变量。所以在这种情况下,我需要一些东西把它转换成字符串。那么把它转换成字符串,有什么问题吗?下一次写“给定以下剧本”时要明确声明:“你实际上希望读者忽略“给定剧本”并读懂你的思想。如果我使用文字字符串,与使用内联版本相比,它不会提供太多好处。无论如何,转换为字符串并不是那么简单,因为它必须与内联版本完全相同。我最终得到了
“{{bar | to|json | replace('\',\''\')}”“
。不管怎样,谢谢你的指点。这项工作,但在一本真正的剧本中,我想使用一个在其他地方定义的变量。所以在这种情况下,我需要一些东西把它转换成字符串。那么把它转换成字符串,有什么问题吗?下一次写“给定以下剧本”时要明确声明:“你实际上希望读者忽略“给定剧本”并读懂你的思想。如果我使用文字字符串,与使用内联版本相比,它不会提供太多好处。无论如何,转换为字符串并不是那么简单,因为它必须与内联版本完全相同。最后我得到了“{{bar | to|json | replace('\',\''\'')}}”
。无论如何,谢谢你的指针