diff --git a/blockdev/src/blockdev.rs b/blockdev/src/blockdev.rs index f89f0859..667defe0 100644 --- a/blockdev/src/blockdev.rs +++ b/blockdev/src/blockdev.rs @@ -25,6 +25,8 @@ pub struct Device { pub serial: Option, pub model: Option, pub partlabel: Option, + pub parttype: Option, + pub partuuid: Option, pub children: Option>, pub size: u64, #[serde(rename = "maj:min")] @@ -330,6 +332,24 @@ mod test { } } + #[test] + fn test_parse_lsblk() { + let fixture = include_str!("../tests/fixtures/lsblk.json"); + let devs: DevicesOutput = serde_json::from_str(&fixture).unwrap(); + let dev = devs.blockdevices.into_iter().next().unwrap(); + let children = dev.children.as_deref().unwrap(); + assert_eq!(children.len(), 3); + let first_child = &children[0]; + assert_eq!( + first_child.parttype.as_deref().unwrap(), + "21686148-6449-6e6f-744e-656564454649" + ); + assert_eq!( + first_child.partuuid.as_deref().unwrap(), + "3979e399-262f-4666-aabc-7ab5d3add2f0" + ); + } + #[test] fn test_parse_sfdisk() -> Result<()> { let fixture = indoc::indoc! { r#" diff --git a/blockdev/tests/fixtures/lsblk.json b/blockdev/tests/fixtures/lsblk.json new file mode 100644 index 00000000..e8be201c --- /dev/null +++ b/blockdev/tests/fixtures/lsblk.json @@ -0,0 +1,313 @@ +{ + "blockdevices": [ + { + "alignment": 0, + "id-link": null, + "id": null, + "disc-aln": 0, + "dax": false, + "disc-gran": 512, + "disk-seq": 1, + "disc-max": 2147483136, + "disc-zero": false, + "fsavail": null, + "fsroots": [ + null + ], + "fssize": null, + "fstype": null, + "fsused": null, + "fsuse%": null, + "fsver": null, + "group": "disk", + "hctl": null, + "hotplug": false, + "kname": "vda", + "label": null, + "log-sec": 512, + "maj:min": "252:0", + "maj": "252", + "min": "0", + "min-io": 512, + "mode": "brw-rw----", + "model": null, + "mq": " 2", + "name": "vda", + "opt-io": 0, + "owner": "root", + "partflags": null, + "partlabel": null, + "partn": null, + "parttype": null, + "parttypename": null, + "partuuid": null, + "path": "/dev/vda", + "phy-sec": 512, + "pkname": null, + "pttype": "gpt", + "ptuuid": "6596b2ac-09cd-41a0-8229-74bc5157d879", + "ra": 128, + "rand": false, + "rev": null, + "rm": false, + "ro": false, + "rota": true, + "rq-size": 256, + "sched": "none", + "serial": null, + "size": 10737418240, + "start": null, + "state": null, + "subsystems": "block:virtio:pci", + "mountpoint": null, + "mountpoints": [ + null + ], + "tran": "virtio", + "type": "disk", + "uuid": null, + "vendor": "0x1af4", + "wsame": 0, + "wwn": null, + "zoned": "none", + "zone-sz": 0, + "zone-wgran": 0, + "zone-app": 0, + "zone-nr": 0, + "zone-omax": 0, + "zone-amax": 0, + "children": [ + { + "alignment": 0, + "id-link": null, + "id": null, + "disc-aln": 0, + "dax": false, + "disc-gran": 512, + "disk-seq": 1, + "disc-max": 2147483136, + "disc-zero": false, + "fsavail": null, + "fsroots": [ + null + ], + "fssize": null, + "fstype": null, + "fsused": null, + "fsuse%": null, + "fsver": null, + "group": "disk", + "hctl": null, + "hotplug": false, + "kname": "vda1", + "label": null, + "log-sec": 512, + "maj:min": "252:1", + "maj": "252", + "min": "1", + "min-io": 512, + "mode": "brw-rw----", + "model": null, + "mq": " 2", + "name": "vda1", + "opt-io": 0, + "owner": "root", + "partflags": null, + "partlabel": "BIOS-BOOT", + "partn": 1, + "parttype": "21686148-6449-6e6f-744e-656564454649", + "parttypename": "BIOS boot", + "partuuid": "3979e399-262f-4666-aabc-7ab5d3add2f0", + "path": "/dev/vda1", + "phy-sec": 512, + "pkname": "vda", + "pttype": "gpt", + "ptuuid": "6596b2ac-09cd-41a0-8229-74bc5157d879", + "ra": 128, + "rand": false, + "rev": null, + "rm": false, + "ro": false, + "rota": true, + "rq-size": 256, + "sched": "none", + "serial": null, + "size": 1048576, + "start": 2048, + "state": null, + "subsystems": "block:virtio:pci", + "mountpoint": null, + "mountpoints": [ + null + ], + "tran": "virtio", + "type": "part", + "uuid": null, + "vendor": null, + "wsame": 0, + "wwn": null, + "zoned": "none", + "zone-sz": 0, + "zone-wgran": 0, + "zone-app": 0, + "zone-nr": 0, + "zone-omax": 0, + "zone-amax": 0 + },{ + "alignment": 0, + "id-link": null, + "id": null, + "disc-aln": 0, + "dax": false, + "disc-gran": 512, + "disk-seq": 1, + "disc-max": 2147483136, + "disc-zero": false, + "fsavail": null, + "fsroots": [ + null + ], + "fssize": null, + "fstype": "vfat", + "fsused": null, + "fsuse%": null, + "fsver": "FAT32", + "group": "disk", + "hctl": null, + "hotplug": false, + "kname": "vda2", + "label": "EFI-SYSTEM", + "log-sec": 512, + "maj:min": "252:2", + "maj": "252", + "min": "2", + "min-io": 512, + "mode": "brw-rw----", + "model": null, + "mq": " 2", + "name": "vda2", + "opt-io": 0, + "owner": "root", + "partflags": null, + "partlabel": "EFI-SYSTEM", + "partn": 2, + "parttype": "c12a7328-f81f-11d2-ba4b-00a0c93ec93b", + "parttypename": "EFI System", + "partuuid": "392375a5-8cb5-4f15-885f-0d6b410dcd6c", + "path": "/dev/vda2", + "phy-sec": 512, + "pkname": "vda", + "pttype": "gpt", + "ptuuid": "6596b2ac-09cd-41a0-8229-74bc5157d879", + "ra": 128, + "rand": false, + "rev": null, + "rm": false, + "ro": false, + "rota": true, + "rq-size": 256, + "sched": "none", + "serial": null, + "size": 536870912, + "start": 4096, + "state": null, + "subsystems": "block:virtio:pci", + "mountpoint": null, + "mountpoints": [ + null + ], + "tran": "virtio", + "type": "part", + "uuid": "FB0A-EA04", + "vendor": null, + "wsame": 0, + "wwn": null, + "zoned": "none", + "zone-sz": 0, + "zone-wgran": 0, + "zone-app": 0, + "zone-nr": 0, + "zone-omax": 0, + "zone-amax": 0 + },{ + "alignment": 0, + "id-link": null, + "id": null, + "disc-aln": 0, + "dax": false, + "disc-gran": 512, + "disk-seq": 1, + "disc-max": 2147483136, + "disc-zero": false, + "fsavail": 5746880512, + "fsroots": [ + "/ostree/deploy/default/var", "/ostree/deploy/default/var", "/ostree/deploy/default/deploy/41b7689b3d723570fcea1942007139dbbd7a4dfa7225b1747b47ddb67b37955a.0/etc", "/boot", "/" + ], + "fssize": 9932427264, + "fstype": "ext4", + "fsused": 3658899456, + "fsuse%": "37%", + "fsver": "1.0", + "group": "disk", + "hctl": null, + "hotplug": false, + "kname": "vda3", + "label": "root", + "log-sec": 512, + "maj:min": "252:3", + "maj": "252", + "min": "3", + "min-io": 512, + "mode": "brw-rw----", + "model": null, + "mq": " 2", + "name": "vda3", + "opt-io": 0, + "owner": "root", + "partflags": null, + "partlabel": "root", + "partn": 3, + "parttype": "0fc63daf-8483-4772-8e79-3d69d8477de4", + "parttypename": "Linux filesystem", + "partuuid": "61709da2-1972-4f44-88fd-9d87bf9efe9c", + "path": "/dev/vda3", + "phy-sec": 512, + "pkname": "vda", + "pttype": "gpt", + "ptuuid": "6596b2ac-09cd-41a0-8229-74bc5157d879", + "ra": 128, + "rand": false, + "rev": null, + "rm": false, + "ro": false, + "rota": true, + "rq-size": 256, + "sched": "none", + "serial": null, + "size": 10197401600, + "start": 1052672, + "state": null, + "subsystems": "block:virtio:pci", + "mountpoint": "/sysroot", + "mountpoints": [ + "/var", "/sysroot/ostree/deploy/default/var", "/etc", "/boot", "/sysroot" + ], + "tran": "virtio", + "type": "part", + "uuid": "9b243e03-e7c5-4f76-83f0-9b4b3f18b0eb", + "vendor": null, + "wsame": 0, + "wwn": null, + "zoned": "none", + "zone-sz": 0, + "zone-wgran": 0, + "zone-app": 0, + "zone-nr": 0, + "zone-omax": 0, + "zone-amax": 0 + } + ] + } + ] +} +