【问题标题】:How to pass Ansible variables to JMESPath query?如何将 Ansible 变量传递给 JMESPath 查询?
【发布时间】: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 变量放入查询中,如果可以,如何?

【问题讨论】:

    标签: ansible jmespath


    【解决方案1】:

    变化:

    bar:  ['dd','ee']
    

    到:

    bar: "['dd','ee']"
    

    否则它被定义为一个对象,但你想要一个字符串。


    如果你已经定义了一个列表,你需要检查the documentation,找到一个合适的过滤器并修改它以满足你的需要:

    将列表连接成字符串:

    {{ list | join(" ") }}
    

    【讨论】:

    • 这行得通,但在真正的剧本中,我想使用在其他地方定义的变量。所以在这种情况下,我需要一些东西来将它转换为字符串。
    • 那么转换成字符串,有什么问题?
    • 下次写“Given the following playbook:”时要明确声明,您实际上希望读者忽略“the given playbook”并读懂您的想法。跨度>
    • 好吧,如果我使用文字字符串,它不会比使用内联版本提供太多好处。无论如何,转换为字符串并不是那么简单,因为它必须与内联版本完全相同。我最终得到了"{{bar| to_json| replace ('\"',\"'\") }}"。无论如何,谢谢你的指点
    猜你喜欢
    • 2017-05-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-24
    • 2015-05-19
    相关资源
    最近更新 更多