diff options
author | Michael DeHaan <mdehaan@mdehaan.rdu.redhat.com> | 2007-06-06 17:53:24 -0400 |
---|---|---|
committer | Michael DeHaan <mdehaan@mdehaan.rdu.redhat.com> | 2007-06-06 17:53:24 -0400 |
commit | 3673e98fdf97f77c2f66d5c14e60dddc5b1fe349 (patch) | |
tree | fb9a8bc429abbaf069bea62cf2aeb7cd62dd1e72 /cobbler | |
parent | ec14d428ffafee3e4fa0b549e26c74028b67313e (diff) | |
download | third_party-cobbler-3673e98fdf97f77c2f66d5c14e60dddc5b1fe349.tar.gz third_party-cobbler-3673e98fdf97f77c2f66d5c14e60dddc5b1fe349.tar.xz third_party-cobbler-3673e98fdf97f77c2f66d5c14e60dddc5b1fe349.zip |
This is Adam Rosenwald's patch for seperating triggers into pre and post
triggers, plus my modifications to make them deal with return codes.
Diffstat (limited to 'cobbler')
-rw-r--r-- | cobbler/collection.py | 24 | ||||
-rw-r--r-- | cobbler/collection_distros.py | 3 | ||||
-rw-r--r-- | cobbler/collection_profiles.py | 3 | ||||
-rw-r--r-- | cobbler/collection_repos.py | 3 | ||||
-rw-r--r-- | cobbler/collection_systems.py | 3 |
5 files changed, 28 insertions, 8 deletions
diff --git a/cobbler/collection.py b/cobbler/collection.py index b1c3be4..6a8c787 100644 --- a/cobbler/collection.py +++ b/cobbler/collection.py @@ -85,13 +85,27 @@ class Collection(serializable.Serializable): if the object was added to the collection. Returns False if the object specified by ref deems itself invalid (and therefore won't be added to the collection). + + with_copy is a bit of a misnomer, but lots of internal add operations + can run with "with_copy" as False. True means a real final commit, as if + entered from the command line (or basically, by a user). + + With with_copy as False, the particular add call might just be being run + during deserialization, in which case extra semantics around the add don't really apply. + So, in that case, don't run any triggers and don't deal with any actual files. + """ if ref is None or not ref.is_valid(): raise CX(_("invalid parameter")) - self.listing[ref.name] = ref + if not with_copy: + # don't need to run triggers, so add it already ... + self.listing[ref.name] = ref # perform filesystem operations if with_copy: + # failure of a pre trigger will prevent the object from being added + self._run_triggers(ref,"/var/lib/cobbler/triggers/add/%s/pre/*" % self.collection_type()) + self.listing[ref.name] = ref lite_sync = action_litesync.BootLiteSync(self.config) if isinstance(ref, item_system.System): lite_sync.add_single_system(ref.name) @@ -104,15 +118,17 @@ class Collection(serializable.Serializable): # save the tree, so if neccessary, scripts can examine it. self.config.api.serialize() - - self._run_triggers(ref,"/var/lib/cobbler/triggers/add/%s/*" % self.collection_type()) + self._run_triggers(ref,"/var/lib/cobbler/triggers/add/%s/post/*" % self.collection_type()) + return True def _run_triggers(self,ref,globber): triggers = glob.glob(globber) for file in triggers: - sub_process.call("%s %s" % (file,ref.name), shell=True) + rc = sub_process.call("%s %s" % (file,ref.name), shell=True) + if rc != 0: + raise CX(_("cobbler trigger failed: %(file)s returns %(code)d") % { "file" : file, "code" : rc }) def printable(self): """ diff --git a/cobbler/collection_distros.py b/cobbler/collection_distros.py index 3fe45ed..4b88002 100644 --- a/cobbler/collection_distros.py +++ b/cobbler/collection_distros.py @@ -52,9 +52,10 @@ class Distros(collection.Collection): raise CX(_("removal would orphan profile: %s") % v.name) if self.find(name): if with_delete: + self._run_triggers(self.listing[name], "/var/lib/cobbler/triggers/delete/distro/pre/*") lite_sync = action_litesync.BootLiteSync(self.config) lite_sync.remove_single_profile(name) - self._run_triggers(self.listing[name], "/var/lib/cobbler/triggers/delete/distro/*") + self._run_triggers(self.listing[name], "/var/lib/cobbler/triggers/delete/distro/post/*") del self.listing[name] return True raise CX(_("cannot delete object that does not exist")) diff --git a/cobbler/collection_profiles.py b/cobbler/collection_profiles.py index cd1d104..bebaf49 100644 --- a/cobbler/collection_profiles.py +++ b/cobbler/collection_profiles.py @@ -50,9 +50,10 @@ class Profiles(collection.Collection): raise CX(_("removal would orphan system: %s") % v.name) if self.find(name): if with_delete: + self._run_triggers(self.listing[name], "/var/lib/cobbler/triggers/delete/profile/pre/*") lite_sync = action_litesync.BootLiteSync(self.config) lite_sync.remove_single_profile(name) - self._run_triggers(self.listing[name], "/var/lib/cobbler/triggers/delete/profile/*") + self._run_triggers(self.listing[name], "/var/lib/cobbler/triggers/delete/profile/post/*") del self.listing[name] return True raise CX(_("cannot delete an object that does not exist")) diff --git a/cobbler/collection_repos.py b/cobbler/collection_repos.py index 922a1ad..e4e5219 100644 --- a/cobbler/collection_repos.py +++ b/cobbler/collection_repos.py @@ -54,8 +54,9 @@ class Repos(collection.Collection): # but is left in for consistancy in the API. if self.find(name): - self._run_triggers(self.listing[name], "/var/lib/cobbler/triggers/delete/repo/*") + self._run_triggers(self.listing[name], "/var/lib/cobbler/triggers/delete/repo/pre/*") del self.listing[name] + self._run_triggers(self.listing[name], "/var/lib/cobbler/triggers/delete/repo/post/*") return True raise CX(_("cannot delete an object that does not exist")) diff --git a/cobbler/collection_systems.py b/cobbler/collection_systems.py index 4eff2fb..952fdba 100644 --- a/cobbler/collection_systems.py +++ b/cobbler/collection_systems.py @@ -50,9 +50,10 @@ class Systems(collection.Collection): """ if self.find(name): if with_delete: + self._run_triggers(self.listing[name], "/var/lib/cobbler/triggers/delete/system/pre/*") lite_sync = action_litesync.BootLiteSync(self.config) lite_sync.remove_single_system(name) - self._run_triggers(self.listing[name], "/var/lib/cobbler/triggers/delete/system/*") + self._run_triggers(self.listing[name], "/var/lib/cobbler/triggers/delete/system/post/*") del self.listing[name] return True raise CX(_("cannot delete an object that does not exist")) |