]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
ceph-volume batch: return valid empty json reports 37531/head
authorJan Fajerski <jfajerski@suse.com>
Sat, 3 Oct 2020 07:40:33 +0000 (09:40 +0200)
committerJan Fajerski <jfajerski@suse.com>
Sat, 3 Oct 2020 13:47:27 +0000 (15:47 +0200)
Fixes: https://tracker.ceph.com/issues/47729
Signed-off-by: Jan Fajerski <jfajerski@suse.com>
src/ceph-volume/ceph_volume/devices/lvm/batch.py
src/ceph-volume/ceph_volume/tests/devices/lvm/test_batch.py

index 21fcdd09cd8e10ae46fa7c4dd506046866dd8100..a6ced6a1085047833e418e33577b20f2a085f1ca 100644 (file)
@@ -325,12 +325,11 @@ class Batch(object):
             setattr(self, '{}usable'.format(dev_list), [])
 
     def report(self, plan):
-        if self.args.format == 'json':
-            print(json.dumps([osd.report_json() for osd in plan]))
-        elif self.args.format == 'json-pretty':
-            print(json.dumps([osd.report_json() for osd in plan], indent=4,
-                       sort_keys=True))
-        else:
+        report = self._create_report(plan)
+        print(report)
+
+    def _create_report(self, plan):
+        if self.args.format == 'pretty':
             report = ''
             report += templates.total_osds.format(total_osds=len(plan))
 
@@ -338,8 +337,16 @@ class Batch(object):
             for osd in plan:
                 report += templates.osd_header
                 report += osd.report()
-
-            print(report)
+            return report
+        else:
+            json_report = []
+            for osd in plan:
+                json_report.append(osd.report_json())
+            if self.args.format == 'json':
+                return json.dumps(json_report)
+            elif self.args.format == 'json-pretty':
+                return json.dumps(json_report, indent=4,
+                                  sort_keys=True)
 
     def _check_slot_args(self):
         '''
index 692bce7456e0fde489dc313d50e9f32187b8b84d..29d23fd72b64e0dd2a73ea074fde1becb00debf9 100644 (file)
@@ -1,4 +1,5 @@
 import pytest
+import json
 import random
 from ceph_volume.devices.lvm import batch
 
@@ -19,7 +20,7 @@ class TestBatch(object):
         assert 'Device lists are not disjoint' in str(disjoint_ex.value)
 
     @pytest.mark.parametrize('format_', ['pretty', 'json', 'json-pretty'])
-    def test_json_report(self, format_, factory, conf_ceph_stub, mock_device_generator):
+    def test_report(self, format_, factory, conf_ceph_stub, mock_device_generator):
         # just ensure reporting works
         conf_ceph_stub('[global]\nfsid=asdf-lkjh')
         devs = [mock_device_generator() for _ in range(5)]
@@ -40,6 +41,29 @@ class TestBatch(object):
         b.args = args
         b.report(plan)
 
+    @pytest.mark.parametrize('format_', ['json', 'json-pretty'])
+    def test_json_report_valid_empty(self, format_, factory, conf_ceph_stub, mock_device_generator):
+        # ensure json reports are valid when empty
+        conf_ceph_stub('[global]\nfsid=asdf-lkjh')
+        devs = [mock_device_generator() for _ in range(5)]
+        args = factory(data_slots=1,
+                       osds_per_device=1,
+                       osd_ids=[],
+                       report=True,
+                       format=format_,
+                       devices=devs,
+                       db_devices=[],
+                       wal_devices=[],
+                       bluestore=True,
+                       block_db_size="1G",
+                       dmcrypt=True,
+                      )
+        b = batch.Batch([])
+        plan = b.get_plan(args)
+        b.args = args
+        report = b._create_report(plan)
+        json.loads(report)
+
     def test_get_physical_osds_return_len(self, factory,
                                           mock_devices_available,
                                           conf_ceph_stub,