【问题标题】:Ansible : pass a variable in a json_query filterAnsible:在 json_query 过滤器中传递一个变量
【发布时间】:2020-12-03 03:06:23
【问题描述】:

我需要在 json_query 过滤器中传递一个变量。

这个带有固定字符串的例子可以正常工作(string=tutu):

- set_fact:
 my_value_exist: "{{ my_json.json | json_query('contains(component.name,`tutu`)')}}"

但我需要传递一个变量,而不是 tutu

- set_fact:
 my_value_exist: "{{ my_json.json | json_query('contains(component.name,`{{my_var}}`)')}}"

{{my_var}} 是在上一步中检索到的字符串

您是否有正确的语法,以便变量 {{my_var}} 可以在参数中正确传递?

感谢您的帮助。

问候,

【问题讨论】:

  • 你能试试这个吗:my_value_exist: "{{ my_json.json | json_query('contains(component.name,my_var)')}}"
  • 感谢您的回答。
  • 该值存在于 json 中,但使用此语法返回值等于 false。 my_value_exit 应该返回 true

标签: json ansible


【解决方案1】:

为任务使用辅助变量:

- set_fact:
    my_value_exist: "{{ my_json.json | json_query(qry) }}"
  vars:
    qry: 'contains(component.name,`{{my_var}}`'

【讨论】:

  • 我找到了这个任务的解决方案:
  • - 名称:我的值是否存在调试:var=item with_items:“{{ my_json.json | json_query(my_query)}}” vars:my_query:“contains(component.name,{{ my_var | to_json | 替换 ('\"',\"'\")}})" 寄存器:my_value_exist
  • 请把它作为单独的答案发布。但在我看来,这有点矫枉过正。
  • 在尝试将变量与 json_query 一起使用时帮助了我。谢谢。
【解决方案2】:

如果您想避免使用辅助 var,您可以直接使用第二个 var,方法是将其用转义双引号 (\") 括在加号 (+) 之间,如下所示:

- set_fact:
    my_value_exist: "{{ my_json.json | json_query('contains(component.name,`\" + my_var + \"`)') }}"

我知道这是一个老问题,但它可能会对某人有所帮助,因为这是 google 上该主题的最高结果。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-11-23
    • 1970-01-01
    • 2020-02-05
    • 2019-12-20
    • 1970-01-01
    • 2021-09-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多