From 8e387fad57115e697ec406570bb6b55e1dcb0809 Mon Sep 17 00:00:00 2001 From: Casey Dahlin Date: Mon, 5 Jan 2009 05:20:37 -0500 Subject: Events mechanism --- statemachine.py | 23 ++++++++++++++++++++--- 1 file changed, 20 insertions(+), 3 deletions(-) (limited to 'statemachine.py') diff --git a/statemachine.py b/statemachine.py index 3c63048..609da17 100644 --- a/statemachine.py +++ b/statemachine.py @@ -16,6 +16,17 @@ class StateMachine: """ self.up = set() self.deps = [] + self.event_triggers = [] + + def emit(self, event): + """ + Emit an event. + """ + retval = False + for evpat, cat in self.event_triggers: + if event.subset_of(evpat): + retval |= self.bring_up(cat.intersect_args(**event.args)) + return retval def bring_up(self, cat): """ @@ -120,13 +131,19 @@ if __name__ == "__main__": sm.deps.append((Category("mounted", type=m("nfs")), Category("network_up"))) sm.deps.append((Category("mounted", type=nm("nfs")), Category("found_disk"))) sm.deps.append((Category("mounted"), Category("vol_conf"))) + + sm.event_triggers.append((Category("fstab_line"), Category("vol_conf", src=m("fstabd")))) + sm.bring_up(Category("network_up")) - sm.bring_up(Category("vol_conf", label=m("myroot"), type=m("ext3"), mountpoint=m("/"))) - sm.bring_up(Category("vol_conf", devname=m("foosrv.com:/vol/home"), type=m("nfs"), mountpoint=m("/home"))) - sm.bring_up(Category("vol_conf", devname=m("foosrv.com:/vol/beefs"), type=m("nfs"), mountpoint=m("/beefs"))) sm.bring_up(Category("found_disk", uuid=m("d3adb3ef"), devname=m("/dev/sda"), label=m("myroot"))) sm.bring_up(Category("mounted", devname=any(), mountpoint=any())) print sm print "--" + sm.emit(Category("fstab_line", label=m("myroot"), type=m("ext3"), mountpoint=m("/"))) + sm.emit(Category("fstab_line", devname=m("foosrv.com:/vol/home"), type=m("nfs"), mountpoint=m("/home"))) + sm.emit(Category("fstab_line", devname=m("foosrv.com:/vol/beefs"), type=m("nfs"), mountpoint=m("/beefs"))) + sm.bring_up(Category("mounted", devname=any(), mountpoint=any())) + print sm + print "--" sm.bring_down(Category("network_up")) print sm -- cgit