From 1bf61770d9f18366c6d35af35051e65e9f0ad243 Mon Sep 17 00:00:00 2001 From: Anders Ingemann Date: Sat, 5 Oct 2013 22:01:05 +0200 Subject: [PATCH] Access fsm states directly --- base/fs/partitionmaps/abstract.py | 8 ++++---- base/fs/partitionmaps/none.py | 2 +- base/fs/partitions/single.py | 2 -- base/fs/volume.py | 2 +- common/fs/loopbackvolume.py | 2 +- common/fsm_proxy.py | 9 --------- plugins/prebootstrapped/tasks.py | 6 +++--- 7 files changed, 10 insertions(+), 21 deletions(-) diff --git a/base/fs/partitionmaps/abstract.py b/base/fs/partitionmaps/abstract.py index e9bff6f..f26b970 100644 --- a/base/fs/partitionmaps/abstract.py +++ b/base/fs/partitionmaps/abstract.py @@ -19,7 +19,7 @@ class AbstractPartitionMap(FSMProxy): super(AbstractPartitionMap, self).__init__(cfg) def is_blocking(self): - return self.is_state('mapped') + return self.fsm.current == 'mapped' def get_total_size(self): return sum(p.size for p in self.partitions) + 1 @@ -54,12 +54,12 @@ class AbstractPartitionMap(FSMProxy): self.partitions[p_idx].map(partition_path) for idx, partition in enumerate(self.partitions): - if not partition.is_state('mapped'): + if partition.fsm.current not in ['mapped', 'formatted']: raise PartitionError('kpartx did not map partition #{idx}'.format(idx=idx+1)) except PartitionError as e: for partition in self.partitions: - if not partition.is_state('mapped'): + if not partition.fsm.can('unmap'): partition.unmap() log_check_call(['/sbin/kpartx', '-d', volume.device_path]) raise e @@ -70,7 +70,7 @@ class AbstractPartitionMap(FSMProxy): def _before_unmap(self, event): volume = event.volume for partition in self.partitions: - if partition.is_state('mounted'): + if partition.fsm.cannot('unmap'): 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/none.py b/base/fs/partitionmaps/none.py index cbca282..d623874 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_state('mounted') + return self.root.fsm == 'mounted' def get_total_size(self): return self.root.size diff --git a/base/fs/partitions/single.py b/base/fs/partitions/single.py index 5ac3ec5..dd82477 100644 --- a/base/fs/partitions/single.py +++ b/base/fs/partitions/single.py @@ -3,7 +3,5 @@ from abstract import AbstractPartition class SinglePartition(AbstractPartition): - initial_state = 'created' - def _before_create(self, e): pass diff --git a/base/fs/volume.py b/base/fs/volume.py index 209fa6d..e83ad5b 100644 --- a/base/fs/volume.py +++ b/base/fs/volume.py @@ -35,7 +35,7 @@ class Volume(FSMProxy): self.partition_map.root.create() def can_mount_specials(self): - return self.is_state('attached') + return self.fsm.current == 'attached' def mount_specials(self): if self.specials_mounted: diff --git a/common/fs/loopbackvolume.py b/common/fs/loopbackvolume.py index d2918ff..81269b9 100644 --- a/common/fs/loopbackvolume.py +++ b/common/fs/loopbackvolume.py @@ -20,7 +20,7 @@ class LoopbackVolume(Volume): extension = 'raw' def can_mount_specials(self): - return self.is_state('attached') or self.is_state('linked') + return self.fsm.current in ['attached', 'linked'] def create(self, image_path): self.fsm.create(image_path=image_path) diff --git a/common/fsm_proxy.py b/common/fsm_proxy.py index 6235e10..db3d17a 100644 --- a/common/fsm_proxy.py +++ b/common/fsm_proxy.py @@ -9,15 +9,6 @@ class FSMProxy(object): self.fsm = Fysom(cfg) self.attach_proxy_methods(self.fsm, events) - def is_state(self, event): - return self.fsm.isstate(event) - - def set_state(self, event): - self.fsm.current = event - - def get_state(self): - return self.fsm.current - def collect_event_listeners(self, events, callbacks): callbacks = callbacks.copy() callback_names = [] diff --git a/plugins/prebootstrapped/tasks.py b/plugins/prebootstrapped/tasks.py index 1e5f184..135cabb 100644 --- a/plugins/prebootstrapped/tasks.py +++ b/plugins/prebootstrapped/tasks.py @@ -67,7 +67,7 @@ class CreateFromImage(Task): def set_fs_states(volume): - volume.set_state('detached') + volume.fsm.current = 'detached' p_map = volume.partition_map partitions_state = 'attached' @@ -75,7 +75,7 @@ def set_fs_states(volume): if isinstance(p_map, NoPartitions): partitions_state = 'formatted' else: - p_map.set_state('unmapped') + p_map.fsm.current = 'unmapped' partitions_state = 'unmapped_fmt' for partition in p_map.partitions: - partition.set_state(partitions_state) + partition.fsm.current = partitions_state