【发布时间】:2019-11-15 10:47:05
【问题描述】:
通过 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) 在ansible_devices.<disk>.links.ids.scsi-<id> 上查找 Disk.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。
你有什么建议来比较这些元素吗?
谢谢!!
【问题讨论】: