json文件中的Ansible列表

阿莱西奥·迪尼(Alessio Dini)

通过ansible,我需要解析一个JSON文件,并根据内容在Linux系统上运行某种命令。我一直在管理除“磁盘”部分以外的所有内容,但我仍然坚持下去。这是JSON(我分享了几行)

[
    {
        "Hostname": "cavia",
        "Farm": "paolo",
    "Cluster": "paperino",
        "Gateway":  "10.14.35.1",
    "Dns": "172.26.5.110,172.26.5.111,172.26.16.11,172.26.16.12",
    "Routes": "0",
        "Network": [
            {
                "MAC":"00:50:56:b6:c0:db",
                "Vlan":"107 - 10.14.8.0/24 - BE WW TF",
                "Scope": "Production",
                "IP": "10.14.35.9",
                "MASK": "255.255.255.224"
            },
            {
                "MAC":"50:56:b6:19:0c",
                "Vlan":"5 - 10.4.81.0/24 - BE WW TF",
                "Scope": "BE",
                "IP": "10.4.5.9",
                "MASK": "255.255.255.224"
            },
            {
                "MAC":"00:50:56:b6:19:aa",
                "Vlan":"4 - 0.14.81.0/24 - BE WW TF",
                "Scope": "NFS",
                "IP": "172.10.0.5",
                "MASK": "255.255.0.0"
            },
            {
                "MAC":"00:50:b6:19:0c",
                "Vlan":"10087 - 10.14.81.0/24 - BE WW TF",
                "Scope": "Backup",
                "IP": "10.4.96.28",
                "MASK": "255.255.254.0"
            }
        ],   
        "Disk": [
            {
                "ID": "36000c29ccb2f18976786181535e88772",
                "Scope": "New",
                "DiskFs": "/prova"
            },
            {
                "ID": "36000c29ccb2f18976786181535e86553",
                "Scope": "New",
                "DiskFs": "/pippo"
            }
        ]
    }
]

这是我在剧本中写的:

---
- name: "Phase 4 : Filesystem Configuration"
  hosts: just_parsed
  vars:
    data: "{{ lookup('file', '../data/data.json') }}"
  gather_facts: true
  tasks:


    - set_fact:
        disklen: "{{ data[0].Disk | length }}"


    - debug:
        msg: "disklen length is {{ disklen }}"

    - name: Collecting mapped disks
      set_fact:
        localdisks: "{{ ansible_devices.keys() | select('match','sd+') | list }}"



    - debug:
        var: localdisks

我需要:1)在寻找的Disk.ID ansible_devices.<disk>.links.ids.scsi-<id>例如,从ansible_devices中获取sdb磁盘:

"sdb": {
            "holders": [], 
            "host": "Serial Attached SCSI controller: VMware PVSCSI SCSI Controller (rev 02)", 
            "links": {
                "ids": [
                    "scsi-36000c293b2abdd05935792f86fa53bb9", 
                    "wwn-0x6000c293b2abdd05935792f86fa53bb9"
                ], 
                "labels": [], 
                "masters": [], 
                "uuids": []
            }, 
            "model": "Virtual disk", 
            "partitions": {
                "sdb1": {
                    "holders": [
                        "vgvar-lvvar"
                    ], 
                    "links": {
                        "ids": [
                            "lvm-pv-uuid-lOyio6-WTDV-vcQx-CE2h-TbZk-zsH0-HuMqIc", 
                            "scsi-36000c293b2abdd05935792f86fa53bb9-part1", 
                            "wwn-0x6000c293b2abdd05935792f86fa53bb9-part1"
                        ], 
                        "labels": [], 
                        "masters": [
                            "dm-3"
                        ], 
                        "uuids": []
                    }, 
                    "sectors": "20971519", 
                    "sectorsize": 512, 
                    "size": "10.00 GB", 
                    "start": "1", 
                    "uuid": null
                }
            }

我应该看看json文件中的ID之一是否匹配,ansible_devices.sdb.links.ids.scsi-36000c293b2abdd05935792f86fa53bb9但是它们是2个循环,一个来自ID,一个来自ansible_devices。您是否有建议比较这些元素?谢谢!!

弗拉基米尔·博特卡

下面的任务可能会完成这项工作(假设JSON数据存储在hw_info中)。

- debug:
    msg: "{{ item.0.dev }} mounted to device {{ item.1.dev }}"
  loop: "{{ hw_info.0.Disk|
            json_query('[].{dev: DiskFs, id: ID}')|
            product(
            ansible_facts.devices|dict2items|
            json_query('[].{dev: key, ids: value.links.ids}'))|
            list }}"
  when: item.1.ids|map('search', item.0.id) is any

要调试过滤器,请查看产品过滤器中使用的列表

- debug:
    var: item
  loop: "{{ hw_info.0.Disk|
            json_query('[].{dev: DiskFs, id: ID}') }}"

- debug:
    var: item
  loop: "{{ ansible_facts.devices|dict2items|
            json_query('[].{dev: key, ids: value.links.ids}') }}"

问:仅当范围为“新建”时,才应执行此操作

答:将scope项目添加到字典中,然后在when条件下使用它例如

- debug:
    msg: "{{ item.0.dev }} mounted to device {{ item.1.dev }}"
  loop: "{{ hw_info.0.Disk|
            json_query('[].{dev: DiskFs, id: ID, scope: Scope}')|
            product(
            ansible_facts.devices|dict2items|
            json_query('[].{dev: key, ids: value.links.ids}'))|
            list }}"
  when:
    - item.1.ids|map('search', item.0.id) is any
    - item.0.scope == "New"

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Ansible中的JSON文件列表

来自分类Dev

目录中的ansible列表文件

来自分类Dev

Ansible:删除json文件中的空格

来自分类Dev

Ansible 匹配主机与 json 文件中的密钥

来自分类Dev

从 json 列表中将 json 写入文件中

来自分类Dev

如何从Ansible库存文件中获取主机列表?

来自分类Dev

在Ansible中访问JSON格式列表的每个键的值

来自分类Dev

无法解析Ansible Jinja2中的JSON列表

来自分类Dev

在 Ansible 中,如何将传入的 json 存储在文件中?

来自分类Dev

显示JSON文件中的组标题列表

来自分类Dev

JSON文件中的SwiftUI搜索列表

来自分类Dev

Json文件中的列表框

来自分类Dev

在json文件中从字典添加列表值

来自分类Dev

Ansible查找json文件中的一行

来自分类Dev

如何在Ansible中循环遍历JSON列表,并按单独列表中的值过滤?

来自分类Dev

在Ansible中使用json_query查询词典列表中包含的词典列表

来自分类Dev

在Ansible中循环遍历列表中的列表

来自分类Dev

如何在ansible中从变量文件中调用类似值的列表

来自分类Dev

字典中的Ansible解析列表

来自分类Dev

在 Ansible 中过滤 unicode 列表

来自分类Dev

Ansible 从列表中删除项目

来自分类Dev

如何将字典词典转换为Ansible vars文件中的字典列表?

来自分类Dev

通过将文件夹列表作为参数传递来在ansible中创建多个目录

来自分类Dev

我想使用ansible将目录中存在的文件的名称打印为列表

来自分类Dev

Ansible:循环遍历文件群列表

来自分类Dev

从 ansible ini 文件生成主机列表

来自分类Dev

从从 JSON 文件解析的另一个列表列表中构建对象列表

来自分类Dev

如何在Python列表中制作JSON文件?

来自分类Dev

尝试从JSON文件填充JQuery中的列表。如何调试?

Related 相关文章

热门标签

归档