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:
@ -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)
|
||||
|
@ -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)
|
||||
|
2
man/jc.1
2
man/jc.1
@ -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
|
||||
|
1
tests/fixtures/generic/zpool-status-spares.json
vendored
Normal file
1
tests/fixtures/generic/zpool-status-spares.json
vendored
Normal 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"}]
|
23
tests/fixtures/generic/zpool-status-spares.out
vendored
Normal file
23
tests/fixtures/generic/zpool-status-spares.out
vendored
Normal 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
|
@ -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()
|
||||
|
Reference in New Issue
Block a user