【问题标题】:Ansible 2.0 parsing Json and store in another variableAnsible 2.0 解析 Json 并存储在另一个变量中
【发布时间】:2017-05-23 13:21:18
【问题描述】:

我的任务是

  - name: task name
    shell: some command --format json
    register: result

输出将是以下 json 格式

[
  {
    "mac_address": "x.x.x.x.x.x",
    "fixed_ips": "{\"subnet_id\": \"s-s-s-s\",\"ip_address\": \"172.*.*.*\"}",
    "id": "1",
    "name": ""
  },
  {
    "mac_address": "x.x.x.x",
    "fixed_ips": "{\"subnet_id\": \"s-s-s-s\", \"ip_address\": \"192.*.*.*\"}",
    "id": "2",
    "name": ""
  }
]

我想要做的是,只获取以 192 开头的 IP 地址并将其存储到一个变量中,以便我可以在另一个任务中使用它。

【问题讨论】:

  • 发布你的完整 json
  • 按照您的要求粘贴了完整的 json

标签: json parsing ubuntu ansible openstack


【解决方案1】:

如果是字典列表,使用selectattr:

"{{ (result.stdout | from_json | selectattr('ip_address','match','^192') | list | fist).ip_address }}"

我假设您只需要一个元素,所以我使用first 从列表中获取单个元素。

由于输入数据的修改而更新了表达式:

- set_fact:
    ip_address: "{{ ( result.stdout |
                      from_json | 
                      map(attribute='fixed_ips') |
                      map('from_json') |
                      selectattr('ip_address','match','^192') |
                      list |
                      first
                    ).ip_address }}"

fixed_ips 是一个字符串,所以你需要应用from_jsonmap 转换每个项目才能应用selectattr 过滤器。

【讨论】:

  • 嗨发布完整的 json。
  • 嗨,我是新手,所以请解释一下。最后这个 .ip_address 是什么?我们是否将其存储在变量中?
  • 我再次更新了我的答案以完成剧本 sn-p,您可以在其中获得新事实(变量)ip_address
  • 谢谢。现在我需要检查与该 IP 的连接。有什么方法可以 ICMP ping 那个 ip 并检查连接性?
猜你喜欢
  • 1970-01-01
  • 2022-01-12
  • 2016-09-23
  • 2021-09-20
  • 1970-01-01
  • 2014-02-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多