[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PATCH v6 6/8] qcow2.py: Introduce '-j' key to dump in JSON format
From: |
Andrey Shinkevich |
Subject: |
[PATCH v6 6/8] qcow2.py: Introduce '-j' key to dump in JSON format |
Date: |
Fri, 12 Jun 2020 00:19:18 +0300 |
Add the command key to the qcow2.py arguments list to dump QCOW2
metadata in JSON format. Here is the suggested way to do that. The
implementation of the dump in JSON format is in the patch that follows.
Signed-off-by: Andrey Shinkevich <andrey.shinkevich@virtuozzo.com>
---
tests/qemu-iotests/qcow2.py | 20 +++++++++++++++-----
tests/qemu-iotests/qcow2_format.py | 18 +++++++++---------
2 files changed, 24 insertions(+), 14 deletions(-)
diff --git a/tests/qemu-iotests/qcow2.py b/tests/qemu-iotests/qcow2.py
index 8c187e9..b08d8fc 100755
--- a/tests/qemu-iotests/qcow2.py
+++ b/tests/qemu-iotests/qcow2.py
@@ -24,16 +24,19 @@ from qcow2_format import (
)
+dump_json = False
+
+
def cmd_dump_header(fd):
h = QcowHeader(fd)
- h.dump()
+ h.dump(dump_json)
print()
- h.dump_extensions()
+ h.dump_extensions(dump_json)
def cmd_dump_header_exts(fd):
h = QcowHeader(fd)
- h.dump_extensions()
+ h.dump_extensions(dump_json)
def cmd_set_header(fd, name, value):
@@ -132,6 +135,11 @@ cmds = [
def main(filename, cmd, args):
+ global dump_json
+ dump_json = '-j' in sys.argv
+ if dump_json:
+ sys.argv.remove('-j')
+ args.remove('-j')
fd = open(filename, "r+b")
try:
for name, handler, num_args, desc in cmds:
@@ -149,12 +157,14 @@ def main(filename, cmd, args):
def usage():
- print("Usage: %s <file> <cmd> [<arg>, ...]" % sys.argv[0])
+ print("Usage: %s <file> <cmd> [<arg>, ...] [<key>, ...]" % sys.argv[0])
print("")
print("Supported commands:")
for name, handler, num_args, desc in cmds:
print(" %-20s - %s" % (name, desc))
-
+ print("")
+ print("Supported keys:")
+ print(" %-20s - %s" % ('-j', 'Dump in JSON format'))
if __name__ == '__main__':
if len(sys.argv) < 3:
diff --git a/tests/qemu-iotests/qcow2_format.py
b/tests/qemu-iotests/qcow2_format.py
index 2e7c058..95db7a9 100644
--- a/tests/qemu-iotests/qcow2_format.py
+++ b/tests/qemu-iotests/qcow2_format.py
@@ -92,7 +92,7 @@ class Qcow2Struct(metaclass=Qcow2StructMeta):
self.__dict__ = dict((field[2], values[i])
for i, field in enumerate(self.fields))
- def dump(self):
+ def dump(self, dump_json=None):
for f in self.fields:
value = self.__dict__[f[2]]
if isinstance(f[1], str):
@@ -143,10 +143,10 @@ class Qcow2BitmapExt(Qcow2Struct):
def load(self, fd):
self.read_bitmap_directory(fd)
- def dump(self):
- super().dump()
+ def dump(self, dump_json=None):
+ super().dump(dump_json)
for bm in self.bitmaps:
- bm.dump_bitmap_dir_entry()
+ bm.dump_bitmap_dir_entry(dump_json)
BME_FLAG_IN_USE = 1 << 0
@@ -190,7 +190,7 @@ class Qcow2BitmapDirEntry(Qcow2Struct):
table = [e[0] for e in struct.iter_unpack('>Q', fd.read(table_size))]
self.bitmap_table = Qcow2BitmapTable(table)
- def dump_bitmap_dir_entry(self):
+ def dump_bitmap_dir_entry(self, dump_json=None):
print()
print(f'{"Bitmap name":<25} {self.name}')
for fl in self.bitmap_flags:
@@ -298,13 +298,13 @@ class QcowHeaderExtension(Qcow2Struct):
else:
self.obj = None
- def dump(self):
+ def dump(self, dump_json=None):
super().dump()
if self.obj is None:
print(f'{"data":<25} {self.data_str}')
else:
- self.obj.dump()
+ self.obj.dump(dump_json)
@classmethod
def create(cls, magic, data):
@@ -407,8 +407,8 @@ class QcowHeader(Qcow2Struct):
buf = buf[0:header_bytes-1]
fd.write(buf)
- def dump_extensions(self):
+ def dump_extensions(self, dump_json=None):
for ex in self.extensions:
print('Header extension:')
- ex.dump()
+ ex.dump(dump_json)
print()
--
1.8.3.1
- [PATCH v6 0/8] iotests: Dump QCOW2 dirty bitmaps metadata, Andrey Shinkevich, 2020/06/11
- [PATCH v6 2/8] qcow2_format.py: make printable data an extension class member, Andrey Shinkevich, 2020/06/11
- [PATCH v6 3/8] qcow2_format.py: Dump bitmap directory info, Andrey Shinkevich, 2020/06/11
- [PATCH v6 4/8] qcow2_format.py: pass cluster size to substructures, Andrey Shinkevich, 2020/06/11
- [PATCH v6 7/8] qcow2_format.py: collect fields to dump in JSON format, Andrey Shinkevich, 2020/06/11
- [PATCH v6 5/8] qcow2_format.py: Dump bitmap table serialized entries, Andrey Shinkevich, 2020/06/11
- [PATCH v6 6/8] qcow2.py: Introduce '-j' key to dump in JSON format,
Andrey Shinkevich <=
- [PATCH v6 8/8] qcow2_format.py: support dumping metadata in JSON format, Andrey Shinkevich, 2020/06/11
- [PATCH v6 1/8] qcow2: Fix capitalization of header extension constant., Andrey Shinkevich, 2020/06/11