summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--CHANGELOG1
-rw-r--r--cobbler.spec20
-rw-r--r--cobbler/api.py2
-rw-r--r--cobbler/collection.py14
-rw-r--r--cobbler/collection_distros.py3
-rw-r--r--cobbler/collection_profiles.py3
-rw-r--r--cobbler/collection_repos.py3
-rw-r--r--cobbler/collection_systems.py4
-rw-r--r--cobbler/config.py3
-rw-r--r--docs/cobbler.pod5
-rw-r--r--setup.py8
11 files changed, 53 insertions, 13 deletions
diff --git a/CHANGELOG b/CHANGELOG
index b0e2f2b..9a72796 100644
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -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.
diff --git a/setup.py b/setup.py
index f46254e..d5bea99 100644
--- a/setup.py
+++ b/setup.py
@@ -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