Michael DeHaan wrote:
Please correct these, verify "make test" works, try the daemon/non-daemon modes both, and submit a new patch if you'd like this added.

Attached.
diff --git a/cobbler/api.py b/cobbler/api.py
index fed4212..10df06f 100644
--- a/cobbler/api.py
+++ b/cobbler/api.py
@@ -59,16 +59,16 @@ DEBUG = 5
 
 class BootAPI:
 
-
     __shared_state = {}
     __has_loaded = False
 
-    def __init__(self):
+    def __init__(self, log_settings={}):
         """
         Constructor
         """
 
         self.__dict__ = BootAPI.__shared_state
+        self.log_settings = log_settings
         self.perms_ok = False
         if not BootAPI.__has_loaded:
 
@@ -111,7 +111,7 @@ class BootAPI:
             self.perms_ok = True
  
     def __setup_logger(self,name):
-        return utils.setup_logger(name)
+        return utils.setup_logger(name, **self.log_settings)
     
     def last_modified_time(self):
         """
diff --git a/cobbler/cobblerd.py b/cobbler/cobblerd.py
index 5bb83f5..18b016a 100644
--- a/cobbler/cobblerd.py
+++ b/cobbler/cobblerd.py
@@ -59,6 +59,7 @@ def core(logger=None):
     else:
         # part two: syslog, or syslog+avahi if avahi is installed
         do_other_tasks(bootapi, settings, syslog_port, logger)
+        os.waitpid(pid, 0)
 
 def regen_ss_file():
     # this is only used for Kerberos auth at the moment.
@@ -82,6 +83,7 @@ def do_xmlrpc_tasks(bootapi, settings, xmlrpc_port, xmlrpc_port2, logger):
             do_mandatory_xmlrpc_tasks(bootapi, settings, xmlrpc_port, logger)
         else:
             do_xmlrpc_rw(bootapi, settings, xmlrpc_port2, logger)
+            os.waitpid(pid2, 0)
     else:
         logger.debug("xmlrpc_rw is disabled in the settings file")
         do_mandatory_xmlrpc_tasks(bootapi, settings, xmlrpc_port, logger)
@@ -109,6 +111,7 @@ def do_other_tasks(bootapi, settings, syslog_port, logger):
            do_syslog(bootapi, settings, syslog_port, logger)
         else:
            do_avahi(bootapi, settings, logger)
+           os.waitpid(pid2, 0)
     else:
         do_syslog(bootapi, settings, syslog_port, logger)
 
diff --git a/cobbler/utils.py b/cobbler/utils.py
index 61137ef..fe01209 100644
--- a/cobbler/utils.py
+++ b/cobbler/utils.py
@@ -81,14 +81,14 @@ MODULE_CACHE = {}
 _re_kernel = re.compile(r'vmlinuz(.*)')
 _re_initrd = re.compile(r'initrd(.*).img')
 
-def setup_logger(name):
+def setup_logger(name, log_level=logging.INFO, log_file="/var/log/cobbler/cobbler.log"):
     logger = logging.getLogger(name)
-    logger.setLevel(logging.INFO)
+    logger.setLevel(log_level)
     try:
-        ch = logging.FileHandler("/var/log/cobbler/cobbler.log")
+        ch = logging.FileHandler(log_file)
     except:
         raise CX(_("No write permissions on log file.  Are you root?"))
-    ch.setLevel(logging.INFO)
+    ch.setLevel(log_level)
     formatter = logging.Formatter("%(asctime)s - %(name)s - %(message)s")
     ch.setFormatter(formatter)
     logger.addHandler(ch)
diff --git a/config/cobblerd b/config/cobblerd
index cf97f4d..3beb3c7 100755
--- a/config/cobblerd
+++ b/config/cobblerd
@@ -54,7 +54,7 @@ start() {
         startproc -f -p /var/run/$SERVICE.pid /usr/bin/cobblerd $CONFIG_ARGS
         rc_status -v
     else
-        daemon --check $SERVICE $PROCESS --daemon $CONFIG_ARGS
+        daemon --check $SERVICE $PROCESS --daemonize $CONFIG_ARGS
     fi
     RETVAL=$?
     echo
diff --git a/scripts/cobblerd b/scripts/cobblerd
index 3a47646..37fa44a 100755
--- a/scripts/cobblerd
+++ b/scripts/cobblerd
@@ -21,6 +21,8 @@ import cobbler.cobblerd as app
 import logging
 import cobbler.utils as utils
 
+import optparse
+
 #logger = logging.getLogger("cobbler.cobblerd")
 #logger.setLevel(logging.DEBUG)
 #ch = logging.FileHandler("/var/log/cobbler/cobblerd.log")
@@ -29,13 +31,7 @@ import cobbler.utils as utils
 #ch.setFormatter(formatter)
 #logger.addHandler(ch)
 
-api = bootapi.BootAPI()
-logger = api.logger_remote
-
-if __name__ == "__main__":
-
-    #############################################
-
+def daemonize_self(logger):
     # daemonizing code:  http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/66012
     logger.info("cobblerd started")
     try: 
@@ -69,10 +65,38 @@ if __name__ == "__main__":
     os.dup2(dev_null.fileno(), sys.stdout.fileno()) 
     os.dup2(dev_null.fileno(), sys.stderr.fileno()) 
 
-    #################
+def main():
+    op = optparse.OptionParser()
+    op.set_defaults(daemonize=True, log_level=None)
+    op.add_option('-B', '--daemonize', dest='daemonize', action='store_true',
+        help='run in background (default)')
+    op.add_option('-F', '--no-daemonize', dest='daemonize', action='store_false',
+        help='run in foreground (do not daemonize)')
+    op.add_option('-f', '--log-file', dest='log_file', metavar='NAME',
+        help='file to log to')
+    op.add_option('-l', '--log-level', dest='log_level', metavar='LEVEL',
+        help='log level (ie. INFO, WARNING, ERROR, CRITICAL)')
+
+    options, args = op.parse_args()
+
+    log_settings = {}
+    if options.log_file:
+        log_settings['log_file'] = options.log_file
+    if options.log_level:
+        log_level = logging.getLevelName(options.log_level)
+        if not isinstance(log_level, int):
+            op.error('Unrecognized log level %r given')
+        log_settings['log_level'] = log_level
+    api = bootapi.BootAPI(log_settings=log_settings)
+    logger = api.logger
+
+    if options.daemonize:
+        daemonize_self(logger)
 
     try:
         app.core(logger=logger)
     except:
         utils.log_exc(logger)
 
+if __name__ == "__main__":
+    main()
_______________________________________________
cobbler mailing list
[email protected]
https://fedorahosted.org/mailman/listinfo/cobbler

Reply via email to