Access fsm states directly

This commit is contained in:
Anders Ingemann 2013-10-05 22:01:05 +02:00
parent fb0fa1e94e
commit 1bf61770d9
7 changed files with 10 additions and 21 deletions

View file

@ -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])

View file

@ -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

View file

@ -3,7 +3,5 @@ from abstract import AbstractPartition
class SinglePartition(AbstractPartition):
initial_state = 'created'
def _before_create(self, e):
pass

View file

@ -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:

View file

@ -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)

View file

@ -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 = []

View file

@ -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