gpt4 book ai didi

json - ansible解析json,其中多个键与一个列表变量同名

转载 作者:行者123 更新时间:2023-12-02 03:29:44 24 4
gpt4 key购买 nike

我在使用 ansible 解析 json 时遇到问题我有一个连接到 rancher 并获取 json 文件的任务

任务:

- uri:
url: http://rancher.local:8080/v1/hosts
method: GET
user: ##################
password: ################
body_format: json
register: hosts_json

- name: test
set_fact:
rancher_env_hosts: "{{ item.hostname }}"
#when: item.hostname == "*-i-*"
with_items: "{{hosts_json.json.data}}"

- name: output
debug:
msg: "hosts: {{rancher_env_hosts}}"

我得到以下 json(编辑它以使其更具可读性后):

{
"json": {
"data": [
{
"hostname": "rancher-i-host-02",
"id": "adsfsa"
},
{
"hostname": "rancher-i-host-01",
"id": "gfdgfdg"
},
{
"hostname": "rancher-q-host-01",
"id": "dfgdg"
},
{
"hostname": "rancher-q-host-02",
"id": "dfgdg"
}
]

}

}

当我启动剧本时,我只获得变量中的最后一个主机名,而不是所有主机名列表。我可以将所有列表注册到同一个变量吗?

此外,我还添加了一行注释“#”,以便仅获取与字符串“-i-”匹配的主机名,但它不起作用。有什么想法吗?

最佳答案

这就是 filters (和 this )用于:

- set_fact:
hosts_all: "{{ hosts_json.json.data | map(attribute='hostname') | list }}"
hosts_i: "{{ hosts_json.json.data | map(attribute='hostname') | map('regex_search','.*-i-.*') | select('string') | list }}"

host_all 将包含所有主机名,host_i 将仅包含 .*-i-.* 匹配的主机名。

关于json - ansible解析json,其中多个键与一个列表变量同名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40508564/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com