summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--MANIFEST.in1
-rw-r--r--Makefile3
-rw-r--r--cobbler.spec6
-rw-r--r--cobbler/action_sync.py28
-rw-r--r--cobbler/collection.py6
-rw-r--r--cobbler/utils.py28
-rw-r--r--cobbler/webui/master.py4
-rw-r--r--setup.py36
-rw-r--r--triggers/restart-services.trigger21
9 files changed, 83 insertions, 50 deletions
diff --git a/MANIFEST.in b/MANIFEST.in
index 88752e2..c4103ec 100644
--- a/MANIFEST.in
+++ b/MANIFEST.in
@@ -26,3 +26,4 @@ recursive-include po *.pot
recursive-include po *.po
recursive-include webui_content *
recursive-include webui_templates *
+recursive-include triggers *
diff --git a/Makefile b/Makefile
index 4004fbe..14e7e47 100644
--- a/Makefile
+++ b/Makefile
@@ -42,6 +42,7 @@ devinstall:
cp /tmp/cobbler_settings /var/lib/cobbler/settings
cp /tmp/cobbler_auth.conf /etc/cobbler/auth.conf
cp /tmp/cobbler_modules.conf /etc/cobbler/modules.conf
+ find /var/lib/cobbler/triggers | xargs chmod +x
sdist: clean messages updatewui
python setup.py sdist
@@ -51,7 +52,7 @@ messages: cobbler/*.py
sed -i'~' -e 's/SOME DESCRIPTIVE TITLE/cobbler/g' -e 's/YEAR THE PACKAGE'"'"'S COPYRIGHT HOLDER/2007 Red Hat, Inc. /g' -e 's/FIRST AUTHOR <EMAIL@ADDRESS>, YEAR/Michael DeHaan <mdehaan@redhat.com>, 2007/g' -e 's/PACKAGE VERSION/cobbler $(VERSION)-$(RELEASE)/g' -e 's/PACKAGE/cobbler/g' $(MESSAGESPOT)
-rpms: manpage sdist
+rpms: clean manpage sdist
mkdir -p rpm-build
cp dist/*.gz rpm-build/
rpmbuild --define "_topdir %(pwd)/rpm-build" \
diff --git a/cobbler.spec b/cobbler.spec
index 89de848..326b586 100644
--- a/cobbler.spec
+++ b/cobbler.spec
@@ -164,8 +164,13 @@ test "x$RPM_BUILD_ROOT" != "x" && rm -rf $RPM_BUILD_ROOT
%dir /var/lib/cobbler/triggers/delete/system/post
%dir /var/lib/cobbler/triggers/delete/repo/pre
%dir /var/lib/cobbler/triggers/delete/repo/post
+%dir /var/lib/cobbler/triggers/sync/pre
+%dir /var/lib/cobbler/triggers/sync/post
%dir /var/lib/cobbler/snippets/
+%defattr(744,root,root)
+%config(noreplace) /var/lib/cobbler/triggers/sync/post/restart-services.trigger
+
%defattr(664,root,root)
%config(noreplace) /var/lib/cobbler/settings
%config(noreplace) /var/lib/cobbler/snippets/partition_select
@@ -187,6 +192,7 @@ test "x$RPM_BUILD_ROOT" != "x" && rm -rf $RPM_BUILD_ROOT
- Upstream changes (see CHANGELOG)
- now packaging javascript file(s) seperately for WUI
- backup state files on upgrade
+- cobbler sync now has pre/post triggers, so package those dirs/files
* Fri Sep 28 2007 Michael DeHaan <mdehaan@redhat.com> - 0.6.2-2
- Upstream changes (see CHANGELOG)
diff --git a/cobbler/action_sync.py b/cobbler/action_sync.py
index b9909cb..49c01ea 100644
--- a/cobbler/action_sync.py
+++ b/cobbler/action_sync.py
@@ -59,6 +59,7 @@ class BootSync:
Syncs the current configuration file with the config tree.
Using the Check().run_ functions previously is recommended
"""
+ utils.run_triggers(None, "/var/lib/cobbler/triggers/sync/pre/*")
if not os.path.exists(self.settings.tftpboot):
raise CX(_("cannot find directory: %s") % self.settings.tftpboot)
self.clean_trees()
@@ -71,27 +72,10 @@ class BootSync:
self.write_dhcp_file()
self.regen_ethers()
self.regen_hosts()
- self.restart_dhcp()
self.make_pxe_menu()
+ utils.run_triggers(None, "/var/lib/cobbler/triggers/sync/post/*")
return True
- def restart_dhcp(self):
- """
- DHCP restarts need to be made when the config file is
- changed. ISC or DNSMASQ. Support for ISC omshell not
- yet available (adding dynamically w/o restart).
- """
- try:
- mode = self.settings.manage_dhcp_mode.lower()
- service = "dhcpd"
- if mode == "dnsmasq":
- service = "dnsmasq"
- retcode = self.service(service, "restart")
- if retcode != 0:
- print _("Warning: %s restart failed") % service
- except OSError, e:
- print _("Warning: %s restart failed: ") % service, e
-
def copy_bootloaders(self):
"""
Copy bootloaders to the configured tftpboot directory
@@ -907,11 +891,3 @@ class BootSync:
print oe.errno
raise CX(_("Error creating") % path)
- def service(self, name, action):
- """
- Call /sbin/service NAME ACTION
- """
-
- cmd = "/sbin/service %s %s" % (name, action)
- return sub_process.call(cmd, shell=True)
-
diff --git a/cobbler/collection.py b/cobbler/collection.py
index 4117bd9..8e6be39 100644
--- a/cobbler/collection.py
+++ b/cobbler/collection.py
@@ -155,11 +155,7 @@ class Collection(serializable.Serializable):
return True
def _run_triggers(self,ref,globber):
- triggers = glob.glob(globber)
- for file in triggers:
- 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 })
+ return utils.run_triggers(ref,globber)
def printable(self):
"""
diff --git a/cobbler/utils.py b/cobbler/utils.py
index f8b2193..a2cee35 100644
--- a/cobbler/utils.py
+++ b/cobbler/utils.py
@@ -393,3 +393,31 @@ def hash_to_string(hash):
buffer = buffer + str(key) + "=" + str(value) + " "
return buffer
+def run_triggers(ref,globber):
+ """
+ Runs all the trigger scripts in a given directory.
+ ref can be a cobbler object, if not None, the name will be passed
+ to the script. If ref is None, the script will be called with
+ no argumenets. Globber is a wildcard expression indicating which
+ triggers to run. Example: "/var/lib/cobbler/triggers/blah/*"
+ """
+
+ triggers = glob.glob(globber)
+ triggers.sort()
+ for file in triggers:
+ try:
+ if file.find(".rpm") != -1:
+ # skip .rpmnew files that may have been installed
+ # in the triggers directory
+ continue
+ if ref:
+ rc = sub_process.call([file,ref.name], shell=False)
+ else:
+ rc = sub_process.call([file], shell=False)
+ except:
+ print _("Warning: failed to execute trigger: %s" % file)
+ continue
+
+ if rc != 0:
+ raise CX(_("cobbler trigger failed: %(file)s returns %(code)d") % { "file" : file, "code" : rc })
+
diff --git a/cobbler/webui/master.py b/cobbler/webui/master.py
index c861aeb..17d93b0 100644
--- a/cobbler/webui/master.py
+++ b/cobbler/webui/master.py
@@ -33,8 +33,8 @@ VFN=valueForName
currentTime=time.time
__CHEETAH_version__ = '2.0rc8'
__CHEETAH_versionTuple__ = (2, 0, 0, 'candidate', 8)
-__CHEETAH_genTime__ = 1192820351.713706
-__CHEETAH_genTimestamp__ = 'Fri Oct 19 14:59:11 2007'
+__CHEETAH_genTime__ = 1192826261.8448961
+__CHEETAH_genTimestamp__ = 'Fri Oct 19 16:37:41 2007'
__CHEETAH_src__ = 'webui_templates/master.tmpl'
__CHEETAH_srcLastModified__ = 'Fri Oct 12 11:53:14 2007'
__CHEETAH_docstring__ = 'Autogenerated by CHEETAH: The Python-Powered Template Engine'
diff --git a/setup.py b/setup.py
index d064388..f094d8b 100644
--- a/setup.py
+++ b/setup.py
@@ -15,6 +15,7 @@ if __name__ == "__main__":
manpath = "share/man/man1/"
cobpath = "/var/lib/cobbler/"
backpath = "/var/lib/cobbler/backup/"
+ trigpath = "/var/lib/cobbler/triggers/"
etcpath = "/etc/cobbler/"
wwwconf = "/etc/httpd/conf.d/"
wwwpath = "/var/www/cobbler/"
@@ -168,22 +169,25 @@ if __name__ == "__main__":
(wwwgfx, ['webui_content/cobblerweb.css']),
# Directories to hold cobbler triggers
- ("/var/lib/cobbler/triggers/add/distro/pre", []),
- ("/var/lib/cobbler/triggers/add/distro/post", []),
- ("/var/lib/cobbler/triggers/add/profile/pre", []),
- ("/var/lib/cobbler/triggers/add/profile/post", []),
- ("/var/lib/cobbler/triggers/add/system/pre", []),
- ("/var/lib/cobbler/triggers/add/system/post", []),
- ("/var/lib/cobbler/triggers/add/repo/pre", []),
- ("/var/lib/cobbler/triggers/add/repo/post", []),
- ("/var/lib/cobbler/triggers/delete/distro/pre", []),
- ("/var/lib/cobbler/triggers/delete/distro/post", []),
- ("/var/lib/cobbler/triggers/delete/profile/pre", []),
- ("/var/lib/cobbler/triggers/delete/profile/post", []),
- ("/var/lib/cobbler/triggers/delete/system/pre", []),
- ("/var/lib/cobbler/triggers/delete/system/post", []),
- ("/var/lib/cobbler/triggers/delete/repo/pre", []),
- ("/var/lib/cobbler/triggers/delete/repo/post", [])
+ ("%sadd/distro/pre" % trigpath, []),
+ ("%sadd/distro/post" % trigpath, []),
+ ("%sadd/profile/pre" % trigpath, []),
+ ("%sadd/profile/post" % trigpath, []),
+ ("%sadd/system/pre" % trigpath, []),
+ ("%sadd/system/post" % trigpath, []),
+ ("%sadd/repo/pre" % trigpath, []),
+ ("%sadd/repo/post" % trigpath, []),
+ ("%sdelete/distro/pre" % trigpath, []),
+ ("%sdelete/distro/post" % trigpath, []),
+ ("%sdelete/profile/pre" % trigpath, []),
+ ("%sdelete/profile/post" % trigpath, []),
+ ("%sdelete/system/pre" % trigpath, []),
+ ("%sdelete/system/post" % trigpath, []),
+ ("%sdelete/repo/pre" % trigpath, []),
+ ("%sdelete/repo/post" % trigpath, []),
+ ("%sdelete/repo/post" % trigpath, []),
+ ("%ssync/pre" % trigpath, []),
+ ("%ssync/post" % trigpath, [ "triggers/restart-services.trigger" ])
],
description = SHORT_DESC,
long_description = LONG_DESC
diff --git a/triggers/restart-services.trigger b/triggers/restart-services.trigger
new file mode 100644
index 0000000..98d478b
--- /dev/null
+++ b/triggers/restart-services.trigger
@@ -0,0 +1,21 @@
+#!/usr/bin/python
+
+import cobbler.api as capi
+import os
+import sys
+
+bootapi = capi.BootAPI()
+settings = bootapi.settings()
+manage_dhcp = str(settings.manage_dhcp).lower()
+manage_dhcp_mode = str(settings.manage_dhcp_mode).lower()
+
+if manage_dhcp != "0":
+ if manage_dhcp_mode == "isc":
+ rc = os.system("/sbin/service dhcpd restart")
+ elif manage_dhcp_mode == "dnsmasq":
+ rc = os.system("/sbin/service dnsmasq restart")
+ else:
+ print "- error: unknown DHCP engine: %s" % manage_dhcp_mode
+ rc = 411
+
+sys.exit(rc)