使用列表作为其引用成员的字符串
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'
我生成一个组的用户成员列表:
"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",
]
我想我离
我是不是处在无法逃脱角色的地狱中?提前致谢。
您需要利用 JMESPath 中的 "literal" syntax,将 "raw" JSON 嵌入到查询中,然后让 jinja 在 [=15] 中呈现您的列表=] 兼容方式:
- debug:
msg: "{{ users | json_query( query ) }}"
vars:
query: '[?contains(`{{ adminsys_members|to_json }}`, username)].authorized_keys'