1
0
mirror of https://github.com/kellyjonbrazil/jc.git synced 2025-07-17 01:32:37 +02:00

fix zpool-status parser when there are no columnar values

This commit is contained in:
Kelly Brazil
2024-05-10 11:06:05 -07:00
parent 8a3997cd0e
commit 517137889c
6 changed files with 45 additions and 9 deletions

View File

@ -162,4 +162,4 @@ Compatibility: linux, darwin, freebsd
Source: [`jc/parsers/zpool_status.py`](https://github.com/kellyjonbrazil/jc/blob/master/jc/parsers/zpool_status.py)
Version 1.1 by Kelly Brazil (kellyjonbrazil@gmail.com)
Version 1.2 by Kelly Brazil (kellyjonbrazil@gmail.com)

View File

@ -138,7 +138,7 @@ from jc.parsers.kv import parse as kv_parse
class info():
"""Provides parser metadata (version, author, etc.)"""
version = '1.1'
version = '1.2'
description = '`zpool status` command parser'
author = 'Kelly Brazil'
author_email = 'kellyjonbrazil@gmail.com'
@ -182,11 +182,11 @@ def _build_config_list(string: str) -> List[Dict]:
line_list = line.strip().split(maxsplit=5)
config_obj: Dict = {}
config_obj['name'] = line_list[0]
config_obj['state'] = line_list[1]
config_obj['read'] = line_list[2]
config_obj['write'] = line_list[3]
config_obj['checksum'] = line_list[4]
config_obj['name'] = line_list[0] if len(line_list) > 0 else None
config_obj['state'] = line_list[1] if len(line_list) > 1 else None
config_obj['read'] = line_list[2] if len(line_list) > 2 else None
config_obj['write'] = line_list[3] if len(line_list) > 3 else None
config_obj['checksum'] = line_list[4] if len(line_list) > 4 else None
if len(line_list) == 6:
config_obj['errors'] = line_list[5]
config_list.append(config_obj)

View File

@ -1,4 +1,4 @@
.TH jc 1 2024-05-02 1.25.3 "JSON Convert"
.TH jc 1 2024-05-10 1.25.3 "JSON Convert"
.SH NAME
\fBjc\fP \- JSON Convert JSONifies the output of many CLI tools, file-types,
and strings

View File

@ -0,0 +1 @@
[{"pool":"tank","state":"ONLINE","scan":"scrub repaired 0B in <snip>","config":[{"name":"tank","state":"ONLINE","read":0,"write":0,"checksum":0},{"name":"mirror-0","state":"ONLINE","read":0,"write":0,"checksum":0},{"name":"sdh","state":"ONLINE","read":0,"write":0,"checksum":0},{"name":"sdk","state":"ONLINE","read":0,"write":0,"checksum":0},{"name":"mirror-1","state":"ONLINE","read":0,"write":0,"checksum":0},{"name":"sdl","state":"ONLINE","read":0,"write":0,"checksum":0},{"name":"sdj","state":"ONLINE","read":0,"write":0,"checksum":0},{"name":"mirror-2","state":"ONLINE","read":0,"write":0,"checksum":0},{"name":"sdn","state":"ONLINE","read":0,"write":0,"checksum":0},{"name":"sdm","state":"ONLINE","read":0,"write":0,"checksum":0},{"name":"mirror-3","state":"ONLINE","read":0,"write":0,"checksum":0},{"name":"sdg","state":"ONLINE","read":0,"write":0,"checksum":0},{"name":"sdi","state":"ONLINE","read":0,"write":0,"checksum":0},{"name":"spares","state":null,"read":null,"write":null,"checksum":null},{"name":"sdf","state":"AVAIL","read":null,"write":null,"checksum":null}],"errors":"No known data errors"}]

View File

@ -0,0 +1,23 @@
pool: tank
state: ONLINE
scan: scrub repaired 0B in <snip>
config:
NAME STATE READ WRITE CKSUM
tank ONLINE 0 0 0
mirror-0 ONLINE 0 0 0
sdh ONLINE 0 0 0
sdk ONLINE 0 0 0
mirror-1 ONLINE 0 0 0
sdl ONLINE 0 0 0
sdj ONLINE 0 0 0
mirror-2 ONLINE 0 0 0
sdn ONLINE 0 0 0
sdm ONLINE 0 0 0
mirror-3 ONLINE 0 0 0
sdg ONLINE 0 0 0
sdi ONLINE 0 0 0
spares
sdf AVAIL
errors: No known data errors

View File

@ -25,7 +25,10 @@ class MyTests(unittest.TestCase):
'fixtures/generic/zpool-status-v3.json'),
'zpool_status4': (
'fixtures/generic/zpool-status-v4.out',
'fixtures/generic/zpool-status-v4.json')
'fixtures/generic/zpool-status-v4.json'),
'zpool_status_spares': (
'fixtures/generic/zpool-status-spares.out',
'fixtures/generic/zpool-status-spares.json')
}
for file, filepaths in fixtures.items():
@ -78,6 +81,15 @@ class MyTests(unittest.TestCase):
self.f_json['zpool_status4']
)
def test_zpool_status_spares(self):
"""
Test 'zpool status' with spares section
"""
self.assertEqual(
parse(self.f_in['zpool_status_spares'], quiet=True),
self.f_json['zpool_status_spares']
)
if __name__ == '__main__':
unittest.main()