使用列表作为其引用成员的字符串

Using a list as a string of its quoted members

我生成一个组的用户成员列表:

"ansible_facts": {
    "adminsys_members": [
        "user1", 
        "user2", 
        "user3", 
    ], ...

我想将它用作 json_query 过滤表达式中的字符串,但如果我只写:

query: "[?contains( {{ adminsys_members }}, username)].authorized_keys"

我得到(执行调试):

"query": "[?contains( [u'ulvida', u'apias', u'cchoque', u'vtorterola', u'santiagomr4', u'victor'], username)].authorized_keys"

然后当我尝试执行 json_query 时:

debug: 
  msg: "{{ users | json_query( query ) }}"

它失败了:

fatal: [ta.interior.edu.uy]: FAILED! => {
    "msg": "Error in jmespath.search in json_query filter plugin:\n'literal'"
}

当我手动定义查询时,在列表中使用适当的语法和引号:

query: "[?contains( ['user1', 'user2', 'user3'], username)].authorized_keys"

它工作正常。

我对构建一个给我 字符串 的过滤器感到困惑:

['user1', 'user2', 'user3']

当我将它应用到列表时:

    "adminsys_members": [
        "user1", 
        "user2", 
        "user3", 
    ]

我想我离 where the only solution I din't try is to define a new filter n python, and 不远了,只有答案是行不通的。

我是不是处在无法逃脱角色的地狱中?提前致谢。

您需要利用 JMESPath 中的 "literal" syntax,将 "raw" JSON 嵌入到查询中,然后让 jinja 在 [=15] 中呈现您的列表=] 兼容方式:

- debug:
    msg: "{{ users | json_query( query ) }}"
  vars:
    query: '[?contains(`{{ adminsys_members|to_json }}`, username)].authorized_keys'