--- aux/anamon.init | 101 ++++++++++++++++++++++++++++++++++++ cobbler.spec | 2 + setup.py | 5 +- triggers/clear_anamon_logs.trigger | 39 ++++++++++++++ 4 files changed, 145 insertions(+), 2 deletions(-) create mode 100644 aux/anamon.init create mode 100755 triggers/clear_anamon_logs.trigger
diff --git a/aux/anamon.init b/aux/anamon.init new file mode 100644 index 0000000..b2fd982 --- /dev/null +++ b/aux/anamon.init @@ -0,0 +1,101 @@ +#!/bin/bash +## BEGIN INIT INFO +# Provides: anamon +# Default-Start: 3 5 +# Default-Stop: 0 1 2 4 6 +# Required-Start: +# Should-Start: $network +# Short-Description: Starts the cobbler anamon boot notification program +# Description: anamon runs the first time a machine is booted after +# installation. +## END INIT INFO + +# +# anamon: Starts the cobbler post-install boot notification program +# +# chkconfig: 35 99 95 +# +# description: anamon runs the first time a machine is booted after +# installation. +# + +LOCKFILE="/var/lock/subsys/anamon" +CFGFILE="/etc/sysconfig/anamon" + +# Source function library. +. /etc/init.d/functions + +# Source anamon config +. $CFGFILE + +LOGFILES=${LOGFILES:-/var/log/boot.log} + +# FIXME - can we rely on the koan snippet to update /etc/profile.d/cobbler.sh? +if [ -z "$COBBLER_SERVER" ]; then + echo "No COBBLER_SERVER defined in $CFGFILE" + exit 1 +fi + +if [ -z "$COBBLER_NAME" ]; then + echo "No COBBLER_NAME defined in $CFGFILE" + exit 1 +fi + +if [ -z "$LOGFILES" ]; then + echo "No LOGFILES defined in $CFGFILE" + exit 1 +fi + +start() { + echo -n $"Starting anamon: " + daemon /usr/local/sbin/anamon.py --watchfile "$LOGFILES" --name $COBBLER_NAME --server $COBBLER_SERVER --port ${COBBLER_PORT:-80} --exit + RETVAL=$? + [ $RETVAL -eq 0 ] && touch $LOCKFILE + echo + + # Disable service start + chkconfig anamon off + + return $RETVAL +} + +stop () { + echo -n $"Shutting down anamon: " + killproc /usr/local/sbin/anamon.py + RETVAL=$? + [ $RETVAL -eq 0 ] && rm -f $LOCKFILE + echo + return $RETVAL +} + +restart() { + stop + start +} + +case "$1" in + start) + start + ;; + stop) + stop + ;; + restart) + restart + ;; + condrestart) + if [ -f $LOCKFILE ]; then + restart + fi + ;; + status) + status anamon.py + RETVAL=$? + ;; + *) + echo $"Usage: $0 {start|stop|status|restart|condrestart}" + RETVAL=2 + ;; +esac + +exit $RETVAL diff --git a/cobbler.spec b/cobbler.spec index 4b2b351..0f5ac05 100644 --- a/cobbler.spec +++ b/cobbler.spec @@ -250,6 +250,7 @@ test "x$RPM_BUILD_ROOT" != "x" && rm -rf $RPM_BUILD_ROOT %defattr(744,root,root) %config(noreplace) /var/lib/cobbler/triggers/sync/post/restart-services.trigger %config(noreplace) /var/lib/cobbler/triggers/install/pre/status_pre.trigger +%config(noreplace) /var/lib/cobbler/triggers/install/pre/clear_anamon_logs.trigger %config(noreplace) /var/lib/cobbler/triggers/install/post/status_post.trigger
%defattr(664,root,root) @@ -267,6 +268,7 @@ test "x$RPM_BUILD_ROOT" != "x" && rm -rf $RPM_BUILD_ROOT %config(noreplace) /var/lib/cobbler/snippets/download_config_files %config(noreplace) /var/lib/cobbler/snippets/koan_environment %config(noreplace) /var/lib/cobbler/snippets/pre_anamon +%config(noreplace) /var/lib/cobbler/snippets/post_anamon %config(noreplace) /var/lib/cobbler/snippets/redhat_register /var/lib/cobbler/elilo-3.8-ia64.efi /var/lib/cobbler/menu.c32 diff --git a/setup.py b/setup.py index 45cd5ea..3adaca1 100644 --- a/setup.py +++ b/setup.py @@ -262,6 +262,7 @@ if __name__ == "__main__": (snippetpath, ['snippets/download_config_files']), (snippetpath, ['snippets/koan_environment']), (snippetpath, ['snippets/pre_anamon']), + (snippetpath, ['snippets/post_anamon']), (snippetpath, ['snippets/redhat_register']),
# documentation @@ -347,7 +348,7 @@ if __name__ == "__main__": (wwwcon, ['webui_content/cobblerweb.css']),
# Anamon script - (vw_aux, ['aux/anamon.py']), + (vw_aux, ['aux/anamon.py', 'aux/anamon.init']),
# Directories to hold cobbler triggers ("%s/add/distro/pre" % trigpath, []), @@ -367,7 +368,7 @@ if __name__ == "__main__": ("%s/delete/repo/pre" % trigpath, []), ("%s/delete/repo/post" % trigpath, []), ("%s/delete/repo/post" % trigpath, []), - ("%s/install/pre" % trigpath, [ "triggers/status_pre.trigger"]), + ("%s/install/pre" % trigpath, [ "triggers/status_pre.trigger", "triggers/clear_anamon_logs.trigger"]), ("%s/install/post" % trigpath, [ "triggers/status_post.trigger"]), ("%s/sync/pre" % trigpath, []), ("%s/sync/post" % trigpath, [ "triggers/restart-services.trigger" ]) diff --git a/triggers/clear_anamon_logs.trigger b/triggers/clear_anamon_logs.trigger new file mode 100755 index 0000000..1c5da65 --- /dev/null +++ b/triggers/clear_anamon_logs.trigger @@ -0,0 +1,39 @@ +#!/usr/bin/python + +import os +import glob +import sys +import cobbler.api as capi + +if len(sys.argv) < 3: + print "Missing required arguments" + sys.exit(1) + +objtype = sys.argv[1] # "system" or "profile" +name = sys.argv[2] # name of system or profile +ip = sys.argv[3] # ip or "?" + +# TODO - check if anamon is enabled first +bootapi = capi.BootAPI() +settings = bootapi.settings() +anamon_enabled = settings.anamon_enabled +print "anamon_enabled = %s" % anamon_enabled + +# Remove any files matched with the given glob pattern +def unlink_files(globex): + for f in glob.glob(globex): + if os.path.isfile(f): + try: + print "unlinking '%s'" % f + os.unlink(f) + except OSError, e: + print "failed to unlink '%s'" % f + pass + +if anamon_enabled in [True, 1, "1"]: + dirname = "/var/log/cobbler/anamon/%s" % name + if os.path.isdir(dirname): + unlink_files(os.path.join(dirname, "*")) + +# TODO - log somewhere that we cleared a systems anamon logs +sys.exit(0)