]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
ceph-volume lvm.batch.bluestore allow osds-per-device with SingleType
authorAlfredo Deza <adeza@redhat.com>
Mon, 10 Sep 2018 21:01:57 +0000 (17:01 -0400)
committerAlfredo Deza <adeza@redhat.com>
Thu, 13 Sep 2018 15:26:51 +0000 (11:26 -0400)
Signed-off-by: Alfredo Deza <adeza@redhat.com>
(cherry picked from commit 8c0e707110e284626fe4161097a3121170a3f09d)

src/ceph-volume/ceph_volume/devices/lvm/strategies/bluestore.py

index 14b08e4cb95c73a9aa8f48fe3bcf7e7a2e895d73..013a2a29115e7cfb3f98a57248d0fbba264c72df 100644 (file)
@@ -16,6 +16,7 @@ class SingleType(object):
 
     def __init__(self, devices, args):
         self.args = args
+        self.osds_per_device = args.osds_per_device
         self.devices = devices
         # TODO: add --fast-devices and --slow-devices so these can be customized
         self.hdds = [device for device in devices if device.sys_api['rotational'] == '1']
@@ -24,13 +25,20 @@ class SingleType(object):
         self.validate()
         self.compute()
 
+    @property
+    def total_osds(self):
+        if self.hdds:
+            return len(self.hdds) * self.osds_per_device
+        else:
+            return len(self.ssds) * self.osds_per_device
+
     def report_json(self):
         print(json.dumps(self.computed, indent=4, sort_keys=True))
 
     def report_pretty(self):
         string = ""
         string += templates.total_osds.format(
-            total_osds=len(self.hdds) or len(self.ssds) * 2
+            total_osds=self.total_osds,
         )
         string += templates.osd_component_titles
 
@@ -62,27 +70,26 @@ class SingleType(object):
         a dictionary with the result
         """
         osds = self.computed['osds']
-        vgs = self.computed['vgs']
         for device in self.hdds:
-            vgs.append({'devices': [device.abspath], 'parts': 1})
-            osd = {'data': {}, 'block.db': {}}
-            osd['data']['path'] = device.abspath
-            osd['data']['size'] = device.sys_api['size']
-            osd['data']['parts'] = 1
-            osd['data']['percentage'] = 100
-            osd['data']['human_readable_size'] = str(disk.Size(b=device.sys_api['size']))
-            osds.append(osd)
+            for hdd in range(self.osds_per_device):
+                osd = {'data': {}, 'block.db': {}}
+                osd['data']['path'] = device.abspath
+                osd['data']['size'] = device.sys_api['size'] / self.osds_per_device
+                osd['data']['parts'] = self.osds_per_device
+                osd['data']['percentage'] = 100 / self.osds_per_device
+                osd['data']['human_readable_size'] = str(
+                    disk.Size(b=device.sys_api['size']) / self.osds_per_device
+                )
+                osds.append(osd)
 
         for device in self.ssds:
-            # TODO: creates 2 OSDs per device, make this configurable (env var?)
-            extents = lvm.sizing(device.sys_api['size'], parts=2)
-            vgs.append({'devices': [device.abspath], 'parts': 2})
-            for ssd in range(2):
+            extents = lvm.sizing(device.sys_api['size'], parts=self.osds_per_device)
+            for ssd in range(self.osds_per_device):
                 osd = {'data': {}, 'block.db': {}}
                 osd['data']['path'] = device.abspath
                 osd['data']['size'] = extents['sizes']
                 osd['data']['parts'] = extents['parts']
-                osd['data']['percentage'] = 50
+                osd['data']['percentage'] = 100 / self.osds_per_device
                 osd['data']['human_readable_size'] = str(disk.Size(b=extents['sizes']))
                 osds.append(osd)