Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/extjs/3.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变量传递给JMESPath查询?_Ansible_Jmespath - Fatal编程技术网

如何将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)]"
我想将ansible
bar:['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('\',\''\'')}}”
。无论如何,谢谢你的指针