summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMichael DeHaan <mdehaan@mdehaan.rdu.redhat.com>2007-07-02 17:04:49 -0400
committerMichael DeHaan <mdehaan@mdehaan.rdu.redhat.com>2007-07-02 17:04:49 -0400
commitd8bb2c9c4ed991ed643eb0b44769e74b37289cec (patch)
tree772f7207ce209f6f09a56639729173e2779493b6
parent6b45668dde8d84b5e10fe9f42fcbb96d2e592c99 (diff)
downloadthird_party-cobbler-d8bb2c9c4ed991ed643eb0b44769e74b37289cec.tar.gz
third_party-cobbler-d8bb2c9c4ed991ed643eb0b44769e74b37289cec.tar.xz
third_party-cobbler-d8bb2c9c4ed991ed643eb0b44769e74b37289cec.zip
Add logging for cobblerd + logrotate script.
Bumped revision to 0.5.1.
-rw-r--r--CHANGELOG3
-rw-r--r--MANIFEST.in1
-rw-r--r--cobbler.spec15
-rw-r--r--cobbler/cobblerd.py26
-rw-r--r--cobbler/utils.py13
-rw-r--r--config/cobblerd_rotate9
-rwxr-xr-xscripts/cobblerd19
-rw-r--r--setup.py4
8 files changed, 76 insertions, 14 deletions
diff --git a/CHANGELOG b/CHANGELOG
index 91e629f..bc2b4f5 100644
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -1,6 +1,9 @@
Cobbler CHANGELOG
(all entries mdehaan@redhat.com unless noted otherwise)
+* Mon Jul 02 2007 - 0.5.1
+- Added logging for cobblerd -- /var/log/cobbler/cobblerd.log
+
* Wed Jun 24 2007 - 0.5.0
- Remove hardcode of /var/www/cobbler in cobblerd
- Improve various warning warning messages
diff --git a/MANIFEST.in b/MANIFEST.in
index eda9acd..3b5ba7f 100644
--- a/MANIFEST.in
+++ b/MANIFEST.in
@@ -4,6 +4,7 @@ include loaders/menu.c32
include config/cobbler.conf
include config/rsync.exclude
include config/cobblerd
+include config/logrotate
recursive-include templates *.template
recursive-include kickstarts *.ks
include docs/cobbler.1.gz
diff --git a/cobbler.spec b/cobbler.spec
index afaec91..b25bf5e 100644
--- a/cobbler.spec
+++ b/cobbler.spec
@@ -29,15 +29,15 @@ Url: http://cobbler.et.redhat.com
%description
-Cobbler is a command line tool for configuration of network
-boot and update servers. It is also available as a Python
-library. Cobbler supports PXE, provisioning virtualized images,
+Cobbler is a network boot and update server.
+It can also be used as a Python library.
+Cobbler supports PXE, provisioning virtualized images,
and reinstalling machines that are already running (over SSH).
The last two modes require a helper tool called 'koan' that
integrates with cobbler. Cobbler's advanced features include
-importing distributions from rsync mirrors, kickstart templating,
+importing distributions from DVDs and rsync mirrors, kickstart templating,
integrated yum mirroring, kickstart monitoring, and auto-managing
-dhcpd.conf.
+DHCP configurations for ISC dhcpd and dnsmasq.
%prep
%setup -q
@@ -134,6 +134,11 @@ test "x$RPM_BUILD_ROOT" != "x" && rm -rf $RPM_BUILD_ROOT
%changelog
+* Mon Jul 02 2007 Michael DeHaan <mdehaan@redhat.com> - 0.5.1-1
+- Upstream changes (see CHANGELOG)
+- Modified description
+- Added logrotate script
+
* Wed Jun 27 2007 Michael DeHaan <mdehaan@redhat.com> - 0.5.0-1
- Upstream changes (see CHANGELOG)
- Added dnsmasq.template
diff --git a/cobbler/cobblerd.py b/cobbler/cobblerd.py
index b26aae1..0699632 100644
--- a/cobbler/cobblerd.py
+++ b/cobbler/cobblerd.py
@@ -10,6 +10,7 @@
# along with this program; if not, write to the Free Software
# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+import sys
import socket
import time
import os
@@ -21,8 +22,10 @@ import utils
from rhpl.translate import _, N_, textdomain, utf8
import xmlrpclib
-
def main():
+ core(logger=None)
+
+def core(logger=None):
bootapi = cobbler_api.BootAPI()
settings = bootapi.settings()
@@ -32,21 +35,29 @@ def main():
pid = os.fork()
if pid == 0:
- do_xmlrpc(bootapi, settings, xmlrpc_port)
+ do_xmlrpc(bootapi, settings, xmlrpc_port, logger)
+ else:
+ do_syslog(bootapi, settings, syslog_port, logger)
+
+def log(logger,msg):
+ if logger is not None:
+ logger.info(msg)
else:
- do_syslog(bootapi, settings, syslog_port)
+ print >>sys.stderr, msg
-def do_xmlrpc(bootapi, settings, port):
+def do_xmlrpc(bootapi, settings, port, logger):
- xinterface = CobblerXMLRPCInterface(bootapi)
+ xinterface = CobblerXMLRPCInterface(bootapi,logger)
server = CobblerXMLRPCServer(('', port))
+ log(logger, "XMLRPC running on %s" % port)
server.register_instance(xinterface)
server.serve_forever()
-def do_syslog(bootapi, settings, port):
+def do_syslog(bootapi, settings, port, logger):
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
s.bind(("0.0.0.0", port))
+ log(logger, "syslog running on %s" % port)
buf = 1024
@@ -79,8 +90,9 @@ def do_syslog(bootapi, settings, port):
class CobblerXMLRPCInterface:
- def __init__(self,api):
+ def __init__(self,api,logger):
self.api = api
+ self.logger = logger
def __sorter(self,a,b):
return cmp(a["name"],b["name"])
diff --git a/cobbler/utils.py b/cobbler/utils.py
index 5a83047..acc748b 100644
--- a/cobbler/utils.py
+++ b/cobbler/utils.py
@@ -12,6 +12,7 @@ along with this program; if not, write to the Free Software
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
"""
+import sys
import os
import re
import socket
@@ -20,6 +21,7 @@ import sub_process
import shutil
import string
import traceback
+import logging
from rhpl.translate import _, N_, textdomain, utf8
import api # factor out
@@ -27,6 +29,17 @@ import api # factor out
_re_kernel = re.compile(r'vmlinuz(.*)')
_re_initrd = re.compile(r'initrd(.*).img')
+
+def log_exc(logger):
+ """
+ Log an exception.
+ """
+ (t, v, tb) = sys.exc_info()
+ logger.info("Exception occured: %s" % t )
+ logger.info("Exception value: %s" % v)
+ logger.info("Exception Info:\n%s" % string.join(traceback.format_list(traceback.extract_tb(tb))))
+
+
def trace_me():
x = traceback.extract_stack()
bar = string.join(traceback.format_list(x))
diff --git a/config/cobblerd_rotate b/config/cobblerd_rotate
new file mode 100644
index 0000000..4340bf3
--- /dev/null
+++ b/config/cobblerd_rotate
@@ -0,0 +1,9 @@
+/var/log/cobbler/cobblerd.log {
+ rotate 4
+ weekly
+ postrotate
+ if [ -f /var/lock/subsys/cobblerd ]; then
+ /etc/init.d/cobblerd restart
+ fi
+ endscript
+}
diff --git a/scripts/cobblerd b/scripts/cobblerd
index 409f738..b6bf8a5 100755
--- a/scripts/cobblerd
+++ b/scripts/cobblerd
@@ -17,11 +17,23 @@ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
import sys
import os
import cobbler.cobblerd as app
+import logging
+import cobbler.utils as utils
+
+logger = logging.getLogger("cobbler.cobblerd")
+logger.setLevel(logging.DEBUG)
+ch = logging.FileHandler("/var/log/cobbler/cobblerd.log")
+ch.setLevel(logging.DEBUG)
+formatter = logging.Formatter("%(asctime)s - %(name)s - %(levelname)s - %(message)s")
+ch.setFormatter(formatter)
+logger.addHandler(ch)
if __name__ == "__main__":
#############################################
+
# daemonizing code: http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/66012
+ logger.debug("started")
try:
pid = os.fork()
if pid > 0:
@@ -29,6 +41,7 @@ if __name__ == "__main__":
sys.exit(0)
except OSError, e:
print >>sys.stderr, "fork #1 failed: %d (%s)" % (e.errno, e.strerror)
+ utils.log_exc(logger)
sys.exit(1)
# decouple from parent environment
@@ -44,9 +57,13 @@ if __name__ == "__main__":
sys.exit(0)
except OSError, e:
print >>sys.stderr, "fork #2 failed: %d (%s)" % (e.errno, e.strerror)
+ utils.log_exc(logger)
sys.exit(1)
#################
- app.main()
+ try:
+ app.core(logger=logger)
+ except:
+ utils.log_exc(logger)
diff --git a/setup.py b/setup.py
index 31706bd..064105c 100644
--- a/setup.py
+++ b/setup.py
@@ -4,7 +4,7 @@ import sys
from distutils.core import setup, Extension
import string
-VERSION = "0.5.0"
+VERSION = "0.5.1"
SHORT_DESC = "Boot and update server configurator"
LONG_DESC = """
Cobbler is a command line tool for configuration of boot/provisioning, and update servers which is also accessible as a Python library. Cobbler supports PXE, provisioning virtualized images, and reinstalling machines that are already up and running (over SSH). The last two modes require a helper tool called 'koan' that integrates with cobbler. Cobbler's advanced features include importing distributions from rsync mirrors, kickstart templating, integrated yum mirroring (and linking repository setup with kickstarts), plus managing dhcpd.conf.
@@ -34,6 +34,7 @@ if __name__ == "__main__":
vw_links = "/var/www/cobbler/links"
tftp_cfg = "/tftpboot/pxelinux.cfg"
tftp_images = "/tftpboot/images"
+ rotpath = "/etc/logrotate.d"
setup(
name="cobbler",
version = VERSION,
@@ -47,6 +48,7 @@ if __name__ == "__main__":
],
scripts = ["scripts/cobbler", "scripts/cobblerd"],
data_files = [
+ (rotpath, ['config/cobblerd_rotate']),
(wwwconf, ['config/cobbler.conf']),
(cobpath, ['loaders/elilo-3.6-ia64.efi']),
(cobpath, ['loaders/menu.c32']),