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

时间:2019-01-27 19:25:57

标签: string ansible escaping data-conversion

我生成一组用户的列表:

"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,这只能解决问题。

我难道无法逃脱字符吗?提前致谢。

1 个答案:

答案 0 :(得分:0)

您将需要利用JMESPath中的"literal" syntax,将“原始” JSON嵌入查询中,然后要求jinja以符合JSON的方式呈现列表:

Max Requests    Per Child: 0 - Keep Alive: on - Max Per Connection: 100