Ansible json_query如何删除方括号和双引号

时间:2020-03-23 09:32:12

标签: ansible json-query

我想过滤此变量hp,但它用""打印为方括号。 我如何用""删除方括号只是为了获得唯一的值。有人可以帮忙吗? 我当时正在寻找正则表达式,但是找不到确切的语法。

srv_make1: '{{ basic_params | from_json | json_query("servers.server_details[*].srv_make") }}'

谢谢

2 个答案:

答案 0 :(得分:0)

问:“如何删除方括号和双引号?”

json_query始终返回列表。列表如何显示取决于debug任务。例如

  vars:
    srv_make1: [a,b,c]
  tasks:
    - debug:
        var: srv_make1
    - debug:
        msg: "{{ srv_make1|to_yaml }}"

给予

TASK [debug] ***
ok: [localhost] => {
    "srv_make1": [
        "a", 
        "b", 
        "c"
    ]
}

TASK [debug] ***
ok: [localhost] => {
    "msg": "[a, b, c]\n"
}

可以使用template并将列表写入没有括号和引号的文件中。例如模板

shell> cat srv_make1.conf.j2
{% for item in srv_make1 %}{{ item }} {% endfor %}

执行任务

    - template:
        src: srv_make1.conf.j2
        dest: srv_make1.conf

给予

shell> cat srv_make1.conf
a b c

答案 1 :(得分:0)

我有类似的东西。 得到

["abc"]

要克服它,必须做两件事:

  • | [0] 附加到 json 查询
  • 使用replace去掉"

所以在你的情况下而不是

srv_make1: '{{ basic_params | from_json | json_query("servers.server_details[*].srv_make") }}'

它看起来像

srv_make1: '{{ basic_params | from_json | json_query("servers.server_details[*].srv_make | [0]") | replace('\"','') }}'