我生成一组用户的列表:
"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"
可以。
我很困惑建立一个为我提供 string 的过滤器:
['user1', 'user2', 'user3']
当我将其应用于列表时:
"adminsys_members": [
"user1",
"user2",
"user3",
]
我认为我离this bug不太远,在这里我唯一尝试的解决方案是定义一个新的过滤器n python和this bug,这只能解决问题。
我难道无法逃脱字符吗?提前致谢。
答案 0 :(得分:0)
您将需要利用JMESPath中的"literal" syntax,将“原始” JSON嵌入查询中,然后要求jinja以符合JSON的方式呈现列表:
Max Requests Per Child: 0 - Keep Alive: on - Max Per Connection: 100