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
return prepare.get_journal_size(lv_format=False)
-class SingleType(object):
+class SingleType(Strategy):
"""
Support for all SSDs, or all HDDs, data and journal LVs will be colocated
in the same device
"""
def __init__(self, devices, args):
- self.args = args
- self.osds_per_device = args.osds_per_device
- self.devices = devices
- 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}
+ super(SingleType, self).__init__(devices, args)
self.journal_size = get_journal_size(args)
- if self.devices:
- self.validate()
- self.compute()
- else:
- self.computed["changed"] = False
+ self.validate_compute()
@staticmethod
def type():
return "filestore.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:
Create(command).main()
-class MixedType(object):
+class MixedType(MixedStrategy):
"""
Supports HDDs with SSDs, journals will be placed on SSDs, while HDDs will
be used fully for data.
"""
def __init__(self, devices, args):
- self.args = args
- self.osds_per_device = args.osds_per_device
- self.devices = devices
- 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': [], 'vg': None, 'filtered_devices': args.filtered_devices}
+ super(MixedType, self).__init__(devices, args)
self.blank_ssds = []
self.journals_needed = len(self.hdds) * self.osds_per_device
self.journal_size = get_journal_size(args)
self.system_vgs = lvm.VolumeGroups()
- if self.devices:
- self.validate()
- self.compute()
- else:
- self.computed["changed"] = False
+ self.validate_compute()
@staticmethod
def type():
return "filestore.MixedType"
- def report_json(self):
- print(json.dumps(self.computed, indent=4, sort_keys=True))
-
- @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_pretty(self):
string = ""
if self.args.filtered_devices:
print(string)
- 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):
"""
Ensure that the minimum requirements for this type of scenario is