diff options
-rw-r--r-- | CHANGELOG | 1 | ||||
-rw-r--r-- | cobbler.spec | 20 | ||||
-rw-r--r-- | cobbler/api.py | 2 | ||||
-rw-r--r-- | cobbler/collection.py | 14 | ||||
-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 | 4 | ||||
-rw-r--r-- | cobbler/config.py | 3 | ||||
-rw-r--r-- | docs/cobbler.pod | 5 | ||||
-rw-r--r-- | setup.py | 8 |
11 files changed, 53 insertions, 13 deletions
@@ -9,6 +9,7 @@ Cobbler CHANGELOG - More consistant naming on imports, regardless of data source. - Teach cobbler to remove .olddata dirs, which can happen if createrepo crashes or is killed mid-process - Default yum_core_repos_from_server to 0 +- Implemented triggers for add/delete commands * Thu Apr 05 2007 - 0.4.6 - Bind cobbler_syslogd to all addresses diff --git a/cobbler.spec b/cobbler.spec index 24509e8..8cf1552 100644 --- a/cobbler.spec +++ b/cobbler.spec @@ -2,7 +2,7 @@ Summary: Boot server configurator Name: cobbler Version: 0.4.7 -Release: 1%{?dist} +Release: 2%{?dist} Source0: %{name}-%{version}.tar.gz License: GPL Group: Applications/System @@ -100,18 +100,28 @@ test "x$RPM_BUILD_ROOT" != "x" && rm -rf $RPM_BUILD_ROOT %{python_sitelib}/cobbler/*.py* %{python_sitelib}/cobbler/yaml/*.py* %{_mandir}/man1/cobbler.1.gz -%dir /var/lib/cobbler -/var/lib/cobbler/elilo-3.6-ia64.efi -/var/lib/cobbler/menu.c32 /etc/init.d/cobblersyslogd /etc/httpd/conf.d/cobbler.conf %dir /var/log/cobbler/syslog +%defattr(2770,root,root) +%dir /var/lib/cobbler +%dir /var/lib/cobbler/triggers/add/distro +%dir /var/lib/cobbler/triggers/add/profile +%dir /var/lib/cobbler/triggers/add/system +%dir /var/lib/cobbler/triggers/add/repo +%dir /var/lib/cobbler/triggers/delete/distro +%dir /var/lib/cobbler/triggers/delete/profile +%dir /var/lib/cobbler/triggers/delete/system +%dir /var/lib/cobbler/triggers/delete/repo +/var/lib/cobbler/elilo-3.6-ia64.efi +/var/lib/cobbler/menu.c32 %doc AUTHORS CHANGELOG NEWS README COPYING %changelog -* Tue Apr 10 2007 Michael DeHaan <mdehaan@redhat.com> - 0.4.7-1 +* Tue Apr 10 2007 Michael DeHaan <mdehaan@redhat.com> - 0.4.7-2 - Upstream changes (see CHANGELOG) +- Added triggers to /var/lib/cobbler/triggers * Thu Apr 05 2007 Michael DeHaan <mdehaan@redhat.com> - 0.4.6-0 - Upstream changes (see CHANGELOG) diff --git a/cobbler/api.py b/cobbler/api.py index 8881d83..cda4e86 100644 --- a/cobbler/api.py +++ b/cobbler/api.py @@ -30,7 +30,7 @@ class BootAPI: """ Constructor """ - self._config = config.Config() + self._config = config.Config(self) self.deserialize() self.__settings = self._config.settings() self.sync_flag = self.__settings.minimize_syncs diff --git a/cobbler/collection.py b/cobbler/collection.py index c7e9f46..196de7f 100644 --- a/cobbler/collection.py +++ b/cobbler/collection.py @@ -16,8 +16,10 @@ import exceptions import cexceptions import serializable import utils -import cobbler_msg +import glob +import sub_process +import cobbler_msg import action_litesync import item_system import item_profile @@ -87,6 +89,9 @@ class Collection(serializable.Serializable): raise cexceptions.CobblerException("bad_param") self.listing[ref.name] = ref + # save the tree, so if neccessary, scripts can examine it. + self.config.api.serialize() + # perform filesystem operations if with_copy: lite_sync = action_litesync.BootLiteSync(self.config) @@ -98,10 +103,15 @@ class Collection(serializable.Serializable): lite_sync.add_single_distro(ref.name) else: print "AIEEE ??? %s " % type(ref) - + + self._run_triggers(ref,"/var/lib/cobbler/triggers/add/%s/*" % 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) def printable(self): """ diff --git a/cobbler/collection_distros.py b/cobbler/collection_distros.py index d632ee5..8662adf 100644 --- a/cobbler/collection_distros.py +++ b/cobbler/collection_distros.py @@ -24,7 +24,7 @@ TESTMODE = False class Distros(collection.Collection): def collection_type(self): - return "distribution" + return "distro" def factory_produce(self,config,seed_data): """ @@ -53,6 +53,7 @@ class Distros(collection.Collection): if with_delete: 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/*") del self.listing[name] return True raise cexceptions.CobblerException("delete_nothing") diff --git a/cobbler/collection_profiles.py b/cobbler/collection_profiles.py index cac69fa..8425391 100644 --- a/cobbler/collection_profiles.py +++ b/cobbler/collection_profiles.py @@ -47,10 +47,11 @@ class Profiles(collection.Collection): if v.profile == name: raise cexceptions.CobblerException("orphan_system",v.name) if self.find(name): - del self.listing[name] if with_delete: 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/*") + del self.listing[name] return True raise cexceptions.CobblerException("delete_nothing") diff --git a/cobbler/collection_repos.py b/cobbler/collection_repos.py index 0ae9db3..726d875 100644 --- a/cobbler/collection_repos.py +++ b/cobbler/collection_repos.py @@ -26,7 +26,7 @@ TESTMODE = False class Repos(collection.Collection): def collection_type(self): - return "repository" + return "repo" def factory_produce(self,config,seed_data): """ @@ -48,6 +48,7 @@ class Repos(collection.Collection): Remove element named 'name' from the collection """ if self.find(name): + self._run_triggers(self.listing[name], "/var/lib/cobbler/triggers/delete/repo/*") del self.listing[name] return True raise cexceptions.CobblerException("delete_nothing") diff --git a/cobbler/collection_systems.py b/cobbler/collection_systems.py index 7b6191b..139a71d 100644 --- a/cobbler/collection_systems.py +++ b/cobbler/collection_systems.py @@ -51,7 +51,9 @@ class Systems(collection.Collection): if with_delete: 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/*") del self.listing[name] return True raise cexceptions.CobblerException("delete_nothing") - + + diff --git a/cobbler/config.py b/cobbler/config.py index 64d0287..3444ded 100644 --- a/cobbler/config.py +++ b/cobbler/config.py @@ -30,11 +30,12 @@ import serializer class Config: - def __init__(self): + def __init__(self,api): """ Constructor. Manages a definitive copy of all data collections with weakrefs poiting back into the class so they can understand each other's contents """ + self.api = api self._distros = distros.Distros(weakref.proxy(self)) self._profiles = profiles.Profiles(weakref.proxy(self)) self._systems = systems.Systems(weakref.proxy(self)) diff --git a/docs/cobbler.pod b/docs/cobbler.pod index 30d84c5..3d7d4da 100644 --- a/docs/cobbler.pod +++ b/docs/cobbler.pod @@ -546,6 +546,11 @@ files in /etc/cobbler that can be edited. Running "cobbler sync" is required to apply any changes that are made manually. +=head2 TRIGGERS + +Triggers provide a way to integrate cobbler with arbitrary 3rd party software without modifying cobbler's code. +When adding a distro, profile, system, or repo, all scripts in /var/lib/cobbler/triggers/add are executed for the particular object type. Each particular file must be executable and it is executed with the name of the item being added as a parameter. Deletions work similarly -- delete triggers live in /var/lib/cobbler/triggers/delete. Order of execution is arbitrary, and cobbler does not ship with any triggers by default. + =head2 API Cobbler also makes itself available as a Python API for use by higher level management software. @@ -78,6 +78,14 @@ if __name__ == "__main__": (vw_links, []), (tftp_cfg, []), (tftp_images, []), + ("/var/lib/cobbler/triggers/add/distro", []), + ("/var/lib/cobbler/triggers/add/profile", []), + ("/var/lib/cobbler/triggers/add/system", []), + ("/var/lib/cobbler/triggers/add/repo", []), + ("/var/lib/cobbler/triggers/delete/distro", []), + ("/var/lib/cobbler/triggers/delete/profile", []), + ("/var/lib/cobbler/triggers/delete/system", []), + ("/var/lib/cobbler/triggers/delete/repo", []) ], description = SHORT_DESC, long_description = LONG_DESC |