]> git.proxmox.com Git - ceph.git/blobdiff - ceph/src/ceph-volume/ceph_volume/devices/lvm/strategies/bluestore.py
update source to 12.2.11
[ceph.git] / ceph / src / ceph-volume / ceph_volume / devices / lvm / strategies / bluestore.py
index 92dc3a2e90a74dd8f62bb4d0ac60bc1a73771fa0..ee269a39463f799c79885d1b9d0aaf11ea42baa7 100644 (file)
@@ -1,47 +1,28 @@
 from __future__ import print_function
-import json
 from ceph_volume.util import disk, prepare
 from ceph_volume.api import lvm
 from . import validators
+from .strategies import Strategy
+from .strategies import MixedStrategy
 from ceph_volume.devices.lvm.create import Create
 from ceph_volume.devices.lvm.prepare import Prepare
 from ceph_volume.util import templates
 from ceph_volume.exceptions import SizeAllocationError
 
 
-class SingleType(object):
+class SingleType(Strategy):
     """
     Support for all SSDs, or all HDDS
     """
 
     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']
-        self.ssds = [device for device in devices if device.sys_api['rotational'] == '0']
-        self.computed = {'osds': [], 'vgs': [], 'filtered_devices': args.filtered_devices}
-        if self.devices:
-            self.validate()
-            self.compute()
-        else:
-            self.computed["changed"] = False
+        super(SingleType, self).__init__(devices, args)
+        self.validate_compute()
 
     @staticmethod
     def type():
         return "bluestore.SingleType"
 
-    @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 = ""
         if self.args.filtered_devices:
@@ -141,32 +122,19 @@ class SingleType(object):
                     Create(command).main()
 
 
-class MixedType(object):
+class MixedType(MixedStrategy):
 
     def __init__(self, devices, args):
-        self.args = args
-        self.devices = devices
-        self.osds_per_device = args.osds_per_device
-        # 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']
-        self.ssds = [device for device in devices if device.sys_api['rotational'] == '0']
-        self.computed = {'osds': [], 'filtered_devices': args.filtered_devices}
+        super(MixedType, self).__init__(devices, args)
         self.block_db_size = self.get_block_size()
         self.system_vgs = lvm.VolumeGroups()
         self.dbs_needed = len(self.hdds) * self.osds_per_device
-        if self.devices:
-            self.validate()
-            self.compute()
-        else:
-            self.computed["changed"] = False
+        self.validate_compute()
 
     @staticmethod
     def type():
         return "bluestore.MixedType"
 
-    def report_json(self):
-        print(json.dumps(self.computed, indent=4, sort_keys=True))
-
     def get_block_size(self):
         if self.args.block_db_size:
             return disk.Size(b=self.args.block_db_size)
@@ -319,17 +287,6 @@ class MixedType(object):
             else:
                 Create(command).main()
 
-    def get_common_vg(self):
-        # find all the vgs associated with the current device
-        for ssd in self.ssds:
-            for pv in ssd.pvs_api:
-                vg = self.system_vgs.get(vg_name=pv.vg_name)
-                if not vg:
-                    continue
-                # this should give us just one VG, it would've been caught by
-                # the validator otherwise
-                return vg
-
     def validate(self):
         """
         HDDs represent data devices, and solid state devices are for block.db,