class Table(object): def __init__(self, name, method, root_helper=''): self.root_helper = root_helper self.name = name self.method = method self.path = '' self.dm = Dmsetup(root_helper=root_helper) self.block = Blockdev(root_helper=root_helper) if self.dm.is_exist(self.name): self.existed = True else: self.existed = False def __str__(self): return NotImplementedError() def _parse_table(self): return NotImplementedError() def create_table(self): if self.existed: raise Exception("%s has been existed!" % self.name) else: self.path = self.dm.create_table(self.name, str(self)) self.existed = True def remove_table(self): if not self.existed: raise Exception("%s does NOT exist!" % self.name) else: self.dm.remove_table(self.name) def reload_table(self): self.dm.reload_table(self.name, str(self))
def add_disk(self, disk_path): if os.path.islink(disk_path): disk_path = os.path.realpath(disk_path) disk = Disk.from_path(disk_path, root_helper=self.root_helper) hdd_group = FcgLinearTable(self.group_name, root_helper=self.root_helper) assert hdd_group.existed, "Group %s dose NOT exist..." % self.group_name if not hdd_group.exists(disk): hdd_group.insert_disk(disk) dm = Dmsetup(root_helper=self.root_helper) cached_disk_name = self._cached_disk_name(disk.dev) if not dm.is_exist(cached_disk_name): cache_dev = dm.mapdev_prefix + self._cache_name cached_table = '0 %d linear %s %d' % (disk.size, cache_dev, disk.start) dm.create_table(cached_disk_name, cached_table) return dm.mapdev_prefix + cached_disk_name
def add_disk(self, disk_path): if os.path.islink(disk_path): disk_path = os.path.realpath(disk_path) disk = Disk.from_path(disk_path, root_helper=self.root_helper) if not self.hdd_group: self.hdd_group = DmLinearTable(self.group_name, root_helper=self.root_helper) assert self.hdd_group.existed, "Group %s dose NOT exist..." % self.group_name if not self.hdd_group.exists(disk): self.hdd_group.append_disk(disk) dm = Dmsetup(root_helper=self.root_helper) cached_disk_name = self._cached_disk_name(disk.dev) if not dm.is_exist(cached_disk_name): cache_dev = dm.mapdev_prefix + self._cache_name cached_table = '0 %d linear %s %d' % (disk.size, cache_dev, disk.start) dm.create_table(cached_disk_name, cached_table) return dm.mapdev_prefix + cached_disk_name
def _exists(self, fcg_table, disk): dm = Dmsetup(root_helper=self.root_helper) cached_disk_name = self._cached_disk_name(disk.dev) return fcg_table.exists(disk) and dm.is_exist(cached_disk_name)