Parser for old data model

Builds old data model using data stored in new data model. It is
required to keep at least part of existing API of data-driver.

We can't use existing code to build old data model, because it conatins
at least 2 serious mistake(located during code analisys while creating
parser for new object model). It is also tangled and and wry.

Change-Id: Ic2418a1c2a6334aafb2048fd057d35ca7945c31e
This commit is contained in:
Dmitry Bogun 2016-12-26 16:57:42 +02:00 committed by Andrii Ostapenko
parent 1786de8c21
commit 9ab003ca02
1 changed files with 91 additions and 0 deletions

View File

@ -1019,3 +1019,94 @@ class StorageParser(object):
idnr = objects.block_device.DevIdnr(idnr['type'], idnr['value'])
idnr(self.disk_finder)
return idnr
class DeprecatedPartitionSchemaBuilder(object):
def __init__(self, storage_claim, multiboot_partition):
self.storage_claim = storage_claim
self.multiboot_partition = multiboot_partition
self.schema = objects.PartitionSchema()
self._convert()
def _convert(self):
for claim in self.storage_claim.items:
if isinstance(claim, objects.block_device.Disk):
self._convert_disk(claim)
elif isinstance(claim, objects.block_device.LVMvg):
self._convert_lvm_vg(claim)
elif isinstance(claim, objects.block_device.MDRaid):
self._convert_mdraid(claim)
def _convert_disk(self, disk):
old_disk = self.schema.add_parted(
name=disk.dev, label='gpt', install_bootloader=True,
size=self._unpack_size(disk.size).bytes)
for claim in disk.items:
args = {}
if isinstance(claim, objects.block_device.Partition):
args['keep_data'] = claim.keep_data_flag
partition = old_disk.add_partition(
size=self._unpack_size(claim.size).bytes, guid=claim.guid,
**args)
if isinstance(claim, objects.block_device.FileSystemMixin):
self._add_fs(claim, partition.name)
def _convert_lvm_vg(self, vg):
self.schema.add_vg(name=vg.idnr)
for claim in vg.items:
if isinstance(claim, objects.block_device.LVMpv):
args = {}
if claim.meta_size:
args['metadatasize'] = self._unpack_size(
claim.meta_size).in_unit('MiB').value_int
self.schema.add_pv(name=claim.vg_idnr, **args)
elif isinstance(claim, objects.block_device.LVMlv):
self.schema.add_lv(
name=claim.name, vgname=vg.idnr,
size=self._unpack_size(claim.size).bytes)
self._add_fs(claim, claim.name)
def _convert_mdraid(self, md):
self.schema.add_md(
name=md.name, level=md.level, devices=[
x.expected_dev for x in md.items])
self._add_fs(md, md.name)
def _add_fs(self, claim, dev):
mount = claim.mount
if claim is self.multiboot_partition:
mount = 'multiboot'
if not mount:
return
args = {k: v for k, v in (
('fstab_options', claim.mount_options),
('fs_type', claim.file_system),
('os_id', list(claim.os_binding))) if v}
self.schema.add_fs(
device=dev, mount=mount, fstab_enabled=claim.fstab_member, **args)
@staticmethod
def _unpack_size(size):
return size.size
@staticmethod
def guid_code_to_parted_flags(code):
flags = set()
if code == 0xEF02:
flags.add('bios_grub')
elif code == 0xEF00:
flags.add('boot')
elif code == 0xFD00:
flags.add('raid')
elif code == 0x8E00:
flags.add('lvm')
return sorted(flags)