mirror of
https://github.com/kellyjonbrazil/jc.git
synced 2025-08-10 22:41:51 +02:00
add support for newer versions of sfdisk
This commit is contained in:
@@ -2,11 +2,12 @@
|
|||||||
|
|
||||||
Supports the following `sfdisk` options:
|
Supports the following `sfdisk` options:
|
||||||
- `-l`
|
- `-l`
|
||||||
- `-d`
|
- `-F`
|
||||||
- `-uM`
|
- `-d` (deprecated - only for older versions of util-linux)
|
||||||
- `-uC`
|
- `-uM` (deprecated - only for older versions of util-linux)
|
||||||
- `-uS`
|
- `-uC` (deprecated - only for older versions of util-linux)
|
||||||
- `-uB`
|
- `-uS` (deprecated - only for older versions of util-linux)
|
||||||
|
- `-uB` (deprecated - only for older versions of util-linux)
|
||||||
|
|
||||||
Usage (cli):
|
Usage (cli):
|
||||||
|
|
||||||
@@ -25,24 +26,38 @@ Schema:
|
|||||||
|
|
||||||
[
|
[
|
||||||
{
|
{
|
||||||
"disk": string,
|
"disk": string,
|
||||||
"cylinders": integer,
|
"disk_size": string,
|
||||||
"heads": integer,
|
"free_disk_size": string,
|
||||||
"sectors_per_track": integer,
|
"bytes": integer,
|
||||||
"units": string,
|
"free_bytes": integer,
|
||||||
|
"sectors": integer,
|
||||||
|
"free_sectors": integer,
|
||||||
|
"cylinders": integer,
|
||||||
|
"heads": integer,
|
||||||
|
"sectors_per_track": integer,
|
||||||
|
"units": string,
|
||||||
|
"logical_sector_size": integer,
|
||||||
|
"physical_sector_size": integer,
|
||||||
|
"min_io_size": integer,
|
||||||
|
"optimal_io_size": integer,
|
||||||
|
"disk_label_type": string,
|
||||||
|
"disk_identifier": string,
|
||||||
|
"disk_model": string,
|
||||||
"partitions": [
|
"partitions": [
|
||||||
{
|
{
|
||||||
"device": string,
|
"device": string,
|
||||||
"boot": boolean,
|
"boot": boolean,
|
||||||
"start": integer,
|
"start": integer,
|
||||||
"end": integer,
|
"end": integer,
|
||||||
"size": integer,
|
"size": integer,
|
||||||
"cyls": integer,
|
"cyls": integer,
|
||||||
"mib": integer,
|
"mib": integer,
|
||||||
"blocks": integer,
|
"blocks": integer,
|
||||||
"sectors": integer,
|
"sectors": integer,
|
||||||
"id": string,
|
"id": string,
|
||||||
"system": string
|
"system": string,
|
||||||
|
"type": string
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
@@ -186,7 +201,7 @@ import jc.parsers.universal
|
|||||||
|
|
||||||
class info():
|
class info():
|
||||||
"""Provides parser metadata (version, author, etc.)"""
|
"""Provides parser metadata (version, author, etc.)"""
|
||||||
version = '1.0'
|
version = '1.1'
|
||||||
description = '`sfdisk` command parser'
|
description = '`sfdisk` command parser'
|
||||||
author = 'Kelly Brazil'
|
author = 'Kelly Brazil'
|
||||||
author_email = 'kellyjonbrazil@gmail.com'
|
author_email = 'kellyjonbrazil@gmail.com'
|
||||||
@@ -210,7 +225,8 @@ def _process(proc_data):
|
|||||||
List of Dictionaries. Structured to conform to the schema.
|
List of Dictionaries. Structured to conform to the schema.
|
||||||
"""
|
"""
|
||||||
int_list = ['cylinders', 'heads', 'sectors_per_track', 'start', 'end', 'size', 'cyls', 'mib',
|
int_list = ['cylinders', 'heads', 'sectors_per_track', 'start', 'end', 'size', 'cyls', 'mib',
|
||||||
'blocks', 'sectors']
|
'blocks', 'sectors', 'bytes', 'logical_sector_size', 'physical_sector_size',
|
||||||
|
'min_io_size', 'optimal_io_size', 'free_bytes', 'free_sectors']
|
||||||
bool_list = ['boot']
|
bool_list = ['boot']
|
||||||
|
|
||||||
for entry in proc_data:
|
for entry in proc_data:
|
||||||
@@ -255,6 +271,8 @@ def parse(data, raw=False, quiet=False):
|
|||||||
if jc.utils.has_data(data):
|
if jc.utils.has_data(data):
|
||||||
|
|
||||||
for line in data.splitlines():
|
for line in data.splitlines():
|
||||||
|
|
||||||
|
# deprecated - only for older versions of util-linux
|
||||||
if line.startswith('# partition table of'):
|
if line.startswith('# partition table of'):
|
||||||
if item:
|
if item:
|
||||||
raw_output.append(item)
|
raw_output.append(item)
|
||||||
@@ -265,6 +283,7 @@ def parse(data, raw=False, quiet=False):
|
|||||||
item['disk'] = line.split()[4]
|
item['disk'] = line.split()[4]
|
||||||
continue
|
continue
|
||||||
|
|
||||||
|
# deprecated - only for older versions of util-linux
|
||||||
if option == 'd':
|
if option == 'd':
|
||||||
if line.startswith('unit: '):
|
if line.startswith('unit: '):
|
||||||
item['units'] = line.split()[1]
|
item['units'] = line.split()[1]
|
||||||
@@ -284,23 +303,75 @@ def parse(data, raw=False, quiet=False):
|
|||||||
continue
|
continue
|
||||||
|
|
||||||
else:
|
else:
|
||||||
if line.startswith('Disk '):
|
# older versions of util-linux
|
||||||
|
# Disk /dev/sda: 2610 cylinders, 255 heads, 63 sectors/track
|
||||||
|
if line.startswith('Disk ') and 'sectors/track' in line:
|
||||||
if item:
|
if item:
|
||||||
raw_output.append(item)
|
raw_output.append(item)
|
||||||
|
|
||||||
item = {}
|
item = {}
|
||||||
partitions = []
|
partitions = []
|
||||||
line = line.replace(':', '').replace(',', '')
|
line = line.replace(':', '').replace(',', '')
|
||||||
item['disk'] = line.split()[1]
|
fields = line.split()
|
||||||
item['cylinders'] = line.split()[2]
|
item['disk'] = fields[1]
|
||||||
item['heads'] = line.split()[4]
|
item['cylinders'] = fields[2]
|
||||||
item['sectors_per_track'] = line.split()[6]
|
item['heads'] = fields[4]
|
||||||
|
item['sectors_per_track'] = fields[6]
|
||||||
|
continue
|
||||||
|
|
||||||
|
# util-linux v2.32.0+ (?)
|
||||||
|
# Disk /dev/sda: 20 GiB, 21474836480 bytes, 41943040 sectors
|
||||||
|
if line.startswith('Disk ') and line.endswith('sectors'):
|
||||||
|
if item:
|
||||||
|
raw_output.append(item)
|
||||||
|
|
||||||
|
item = {}
|
||||||
|
partitions = []
|
||||||
|
line = line.replace(':', '').replace(',', '')
|
||||||
|
fields = line.split()
|
||||||
|
item['disk'] = fields[1]
|
||||||
|
item['disk_size'] = ' '.join(fields[2:4])
|
||||||
|
item['bytes'] = fields[4]
|
||||||
|
item['sectors'] = fields[6]
|
||||||
|
continue
|
||||||
|
|
||||||
|
if line.startswith('Disk model: '):
|
||||||
|
item['disk_model'] = line.split(':', maxsplit=1)[1].strip()
|
||||||
|
continue
|
||||||
|
|
||||||
|
if line.startswith('Sector size (logical/physical)'):
|
||||||
|
fields = line.split()
|
||||||
|
item['logical_sector_size'] = fields[3]
|
||||||
|
item['physical_sector_size'] = fields[6]
|
||||||
|
continue
|
||||||
|
|
||||||
|
if line.startswith('I/O size (minimum/optimal)'):
|
||||||
|
fields = line.split()
|
||||||
|
item['min_io_size'] = fields[3]
|
||||||
|
item['optimal_io_size'] = fields[6]
|
||||||
|
continue
|
||||||
|
|
||||||
|
if line.startswith('Disklabel type'):
|
||||||
|
item['disk_label_type'] = line.split(':', maxsplit=1)[1].strip()
|
||||||
|
continue
|
||||||
|
|
||||||
|
if line.startswith('Disk identifier'):
|
||||||
|
item['disk_identifier'] = line.split(':', maxsplit=1)[1].strip()
|
||||||
continue
|
continue
|
||||||
|
|
||||||
if line.startswith('Units: '):
|
if line.startswith('Units: '):
|
||||||
item['units'] = line.split(':')[1].strip()
|
item['units'] = line.split(':')[1].strip()
|
||||||
continue
|
continue
|
||||||
|
|
||||||
|
if line.startswith('Unpartitioned space'):
|
||||||
|
line = line.replace(':', '').replace(',', '')
|
||||||
|
fields = line.split()
|
||||||
|
item['disk'] = fields[2]
|
||||||
|
item['free_disk_size'] = ' '.join(fields[3:5])
|
||||||
|
item['free_bytes'] = fields[5]
|
||||||
|
item['free_sectors'] = fields[7]
|
||||||
|
continue
|
||||||
|
|
||||||
if 'Device' in line and 'Boot' in line and 'Start' in line and 'End' in line:
|
if 'Device' in line and 'Boot' in line and 'Start' in line and 'End' in line:
|
||||||
section = 'partitions'
|
section = 'partitions'
|
||||||
partitions.append(line.lower().replace('#', ' '))
|
partitions.append(line.lower().replace('#', ' '))
|
||||||
|
9
tests/fixtures/centos-8/sfdisk-F.out
vendored
Normal file
9
tests/fixtures/centos-8/sfdisk-F.out
vendored
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
Unpartitioned space /dev/sda: 0 B, 0 bytes, 0 sectors
|
||||||
|
Units: sectors of 1 * 512 = 512 bytes
|
||||||
|
Sector size (logical/physical): 512 bytes / 512 bytes
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
24
tests/fixtures/centos-8/sfdisk-l.out
vendored
Normal file
24
tests/fixtures/centos-8/sfdisk-l.out
vendored
Normal file
@@ -0,0 +1,24 @@
|
|||||||
|
Disk /dev/sda: 20 GiB, 21474836480 bytes, 41943040 sectors
|
||||||
|
Units: sectors of 1 * 512 = 512 bytes
|
||||||
|
Sector size (logical/physical): 512 bytes / 512 bytes
|
||||||
|
I/O size (minimum/optimal): 512 bytes / 512 bytes
|
||||||
|
Disklabel type: dos
|
||||||
|
Disk identifier: 0x94988ac4
|
||||||
|
|
||||||
|
Device Boot Start End Sectors Size Id Type
|
||||||
|
/dev/sda1 * 2048 2099199 2097152 1G 83 Linux
|
||||||
|
/dev/sda2 2099200 41943039 39843840 19G 8e Linux LVM
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
Disk /dev/mapper/cl-root: 17 GiB, 18249416704 bytes, 35643392 sectors
|
||||||
|
Units: sectors of 1 * 512 = 512 bytes
|
||||||
|
Sector size (logical/physical): 512 bytes / 512 bytes
|
||||||
|
I/O size (minimum/optimal): 512 bytes / 512 bytes
|
||||||
|
|
||||||
|
|
||||||
|
Disk /dev/mapper/cl-swap: 2 GiB, 2147483648 bytes, 4194304 sectors
|
||||||
|
Units: sectors of 1 * 512 = 512 bytes
|
||||||
|
Sector size (logical/physical): 512 bytes / 512 bytes
|
||||||
|
I/O size (minimum/optimal): 512 bytes / 512 bytes
|
3
tests/fixtures/debian10/sfdisk-F.out
vendored
Normal file
3
tests/fixtures/debian10/sfdisk-F.out
vendored
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
Unpartitioned space /dev/sda: 0 B, 0 bytes, 0 sectors
|
||||||
|
Units: sectors of 1 * 512 = 512 bytes
|
||||||
|
Sector size (logical/physical): 512 bytes / 512 bytes
|
12
tests/fixtures/debian10/sfdisk-l.out
vendored
Normal file
12
tests/fixtures/debian10/sfdisk-l.out
vendored
Normal file
@@ -0,0 +1,12 @@
|
|||||||
|
Disk /dev/sda: 20 GiB, 21474836480 bytes, 41943040 sectors
|
||||||
|
Disk model: VMware Virtual S
|
||||||
|
Units: sectors of 1 * 512 = 512 bytes
|
||||||
|
Sector size (logical/physical): 512 bytes / 512 bytes
|
||||||
|
I/O size (minimum/optimal): 512 bytes / 512 bytes
|
||||||
|
Disklabel type: dos
|
||||||
|
Disk identifier: 0x3719ef0f
|
||||||
|
|
||||||
|
Device Boot Start End Sectors Size Id Type
|
||||||
|
/dev/sda1 * 2048 39942143 39940096 19G 83 Linux
|
||||||
|
/dev/sda2 39944190 41940991 1996802 975M 5 Extended
|
||||||
|
/dev/sda5 39944192 41940991 1996800 975M 82 Linux swap / Solaris
|
Reference in New Issue
Block a user