diff --git a/base/fs/partitionmaps/abstract.py b/base/fs/partitionmaps/abstract.py index 5871027..a7ea15b 100644 --- a/base/fs/partitionmaps/abstract.py +++ b/base/fs/partitionmaps/abstract.py @@ -70,7 +70,7 @@ class AbstractPartitionMap(FSMProxy): def _before_unmap(self, event): volume = event.volume for partition in self.partitions: - if partition.is_blocking(): + if partition.is_state('mounted'): msg = 'The partition {partition} prevents the unmap procedure'.format(partition=partition) raise PartitionError(msg) log_check_call(['/sbin/kpartx', '-d', volume.device_path]) diff --git a/base/fs/partitionmaps/gpt.py b/base/fs/partitionmaps/gpt.py index b884bd9..0b2e8bf 100644 --- a/base/fs/partitionmaps/gpt.py +++ b/base/fs/partitionmaps/gpt.py @@ -7,14 +7,15 @@ from common.tools import log_check_call class GPTPartitionMap(AbstractPartitionMap): def __init__(self, data): - self.boot = None - self.swap = None + self.partitions = [] if 'boot' in data: self.boot = GPTPartition(data['boot']['size'], data['boot']['filesystem'], 'boot', None) + self.partitions.append(self.boot) self.root = GPTPartition(data['root']['size'], data['root']['filesystem'], 'root', self.boot) + self.partitions.append(self.root) if 'swap' in data: self.swap = GPTSwapPartition(data['swap']['size'], self.root) - self.partitions = filter(lambda p: p is not None, [self.boot, self.root, self.swap]) + self.partitions.append(self.swap) super(GPTPartitionMap, self).__init__() @@ -26,7 +27,7 @@ class GPTPartitionMap(AbstractPartitionMap): partition.create(volume) boot_idx = self.root.get_index() - if self.boot is not None: + if hasattr(self, 'boot'): boot_idx = self.boot.get_index() log_check_call(['/sbin/parted', '--script', volume.device_path, '--', 'set ' + str(boot_idx) + ' boot on']) diff --git a/base/fs/partitionmaps/mbr.py b/base/fs/partitionmaps/mbr.py index 0bc4cfa..0d4b50f 100644 --- a/base/fs/partitionmaps/mbr.py +++ b/base/fs/partitionmaps/mbr.py @@ -7,14 +7,15 @@ from common.tools import log_check_call class MBRPartitionMap(AbstractPartitionMap): def __init__(self, data): - self.boot = None - self.swap = None + self.partitions = [] if 'boot' in data: self.boot = MBRPartition(data['boot']['size'], data['boot']['filesystem'], None) + self.partitions.append(self.boot) self.root = MBRPartition(data['root']['size'], data['root']['filesystem'], self.boot) + self.partitions.append(self.root) if 'swap' in data: self.swap = MBRSwapPartition(data['swap']['size'], self.root) - self.partitions = filter(lambda p: p is not None, [self.boot, self.root, self.swap]) + self.partitions.append(self.swap) super(MBRPartitionMap, self).__init__() @@ -26,7 +27,7 @@ class MBRPartitionMap(AbstractPartitionMap): partition.create(volume) boot_idx = self.root.get_index() - if self.boot is not None: + if hasattr(self, 'boot'): boot_idx = self.boot.get_index() log_check_call(['/sbin/parted', '--script', volume.device_path, '--', 'set ' + str(boot_idx) + ' boot on']) diff --git a/base/fs/partitionmaps/none.py b/base/fs/partitionmaps/none.py index 1b2cfd8..cbca282 100644 --- a/base/fs/partitionmaps/none.py +++ b/base/fs/partitionmaps/none.py @@ -9,7 +9,7 @@ class NoPartitions(object): self.partitions = [self.root] def is_blocking(self): - return self.root.is_blocking() + return self.root.is_state('mounted') def get_total_size(self): return self.root.size diff --git a/base/fs/partitions/abstract.py b/base/fs/partitions/abstract.py index 14a0b1a..9f80618 100644 --- a/base/fs/partitions/abstract.py +++ b/base/fs/partitions/abstract.py @@ -22,9 +22,6 @@ class AbstractPartition(FSMProxy): cfg = {'initial': 'nonexistent', 'events': self.events, 'callbacks': {}} super(AbstractPartition, self).__init__(cfg) - def is_blocking(self): - return self.is_state('mounted') - def get_uuid(self): [uuid] = log_check_call(['/sbin/blkid', '-s', 'UUID', '-o', 'value', self.device_path]) return uuid diff --git a/base/fs/partitions/base.py b/base/fs/partitions/base.py index 65d97ee..8986285 100644 --- a/base/fs/partitions/base.py +++ b/base/fs/partitions/base.py @@ -18,9 +18,6 @@ class BasePartition(AbstractPartition): self.previous = previous super(BasePartition, self).__init__(size, filesystem) - def is_blocking(self): - return self.get_state() in ['mapped', 'mounted', 'formatted'] - def get_index(self): if self.previous is None: return 1 diff --git a/common/tasks/partitioning.py b/common/tasks/partitioning.py index eeca38d..a0ec17b 100644 --- a/common/tasks/partitioning.py +++ b/common/tasks/partitioning.py @@ -9,7 +9,7 @@ class PartitionVolume(Task): phase = phases.volume_preparation def run(self, info): - info.volume.partition_map.create() + info.volume.partition_map.create(info.volume) class MapPartitions(Task): @@ -19,7 +19,7 @@ class MapPartitions(Task): after = [PartitionVolume] def run(self, info): - info.volume.partition_map.map() + info.volume.partition_map.map(info.volume) class UnmapPartitions(Task): @@ -29,4 +29,4 @@ class UnmapPartitions(Task): after = [filesystem.UnmountRoot] def run(self, info): - info.volume.partition_map.unmap() + info.volume.partition_map.unmap(info.volume) diff --git a/providers/virtualbox/tasks/boot.py b/providers/virtualbox/tasks/boot.py index 4577e92..8527030 100644 --- a/providers/virtualbox/tasks/boot.py +++ b/providers/virtualbox/tasks/boot.py @@ -30,9 +30,9 @@ class ConfigureGrub(Task): p_map.boot.unmount() p_map.root.unmount() if not isinstance(p_map, NoPartitions): - p_map.unmap() + p_map.unmap(info.volume) fn() - p_map.map() + p_map.map(info.volume) else: fn() p_map.root.device_path = info.volume.device_path @@ -70,4 +70,4 @@ class ConfigureGrub(Task): raise e if isinstance(info.volume, LoopbackVolume): - remount(info.volume, info.volume.unlink_dm_node) + remount(info.volume.unlink_dm_node)