diff options
-rw-r--r-- | MANIFEST.in | 1 | ||||
-rw-r--r-- | Makefile | 3 | ||||
-rw-r--r-- | cobbler.spec | 6 | ||||
-rw-r--r-- | cobbler/action_sync.py | 28 | ||||
-rw-r--r-- | cobbler/collection.py | 6 | ||||
-rw-r--r-- | cobbler/utils.py | 28 | ||||
-rw-r--r-- | cobbler/webui/master.py | 4 | ||||
-rw-r--r-- | setup.py | 36 | ||||
-rw-r--r-- | triggers/restart-services.trigger | 21 |
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 * @@ -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' @@ -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) |