diff options
Diffstat (limited to 'cobbler/cobblerd.py')
-rw-r--r-- | cobbler/cobblerd.py | 170 |
1 files changed, 34 insertions, 136 deletions
diff --git a/cobbler/cobblerd.py b/cobbler/cobblerd.py index 36645750..4ac711ce 100644 --- a/cobbler/cobblerd.py +++ b/cobbler/cobblerd.py @@ -41,25 +41,17 @@ import remote def main(): core(logger=None) -def core(logger=None): +def core(log_settings={}): - bootapi = cobbler_api.BootAPI() + bootapi = cobbler_api.BootAPI(log_settings=log_settings,is_cobblerd=True) settings = bootapi.settings() - syslog_port = settings.syslog_port xmlrpc_port = settings.xmlrpc_port - xmlrpc_port2 = settings.xmlrpc_rw_port pid = os.fork() regen_ss_file() - if pid == 0: - # part one: XMLRPC -- which may be just read-only or both read-only and read-write - do_xmlrpc_tasks(bootapi, settings, xmlrpc_port, xmlrpc_port2, logger) - else: - # part two: syslog, or syslog+avahi if avahi is installed - do_other_tasks(bootapi, settings, syslog_port, logger) - os.waitpid(pid, 0) + do_xmlrpc_tasks(bootapi, settings, xmlrpc_port) def regen_ss_file(): # this is only used for Kerberos auth at the moment. @@ -76,44 +68,23 @@ def regen_ss_file(): os.system("chown apache /var/lib/cobbler/web.ss") return 1 -def do_xmlrpc_tasks(bootapi, settings, xmlrpc_port, xmlrpc_port2, logger): - if str(settings.xmlrpc_rw_enabled) != "0": - pid2 = os.fork() - if pid2 == 0: - 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) - -def do_mandatory_xmlrpc_tasks(bootapi,settings,xmlrpc_port,logger): - #pid3 = os.fork() - #if pid3 == 0: - # do_xmlrpc(bootapi, settings, xmlrpc_port, logger) - #else: - # # NOTE: this shouldn't be enabled unless we decide - # # to use it for something. - # # do_xmlrpc_unix(bootapi, settings, logger) - # pass - do_xmlrpc(bootapi, settings, xmlrpc_port, logger) - - -def do_other_tasks(bootapi, settings, syslog_port, logger): - - # FUTURE: this should also start the Web UI, if the dependencies - # are available. - - if os.path.exists("/usr/bin/avahi-publish-service"): - pid2 = os.fork() - if pid2 == 0: - 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) +def do_xmlrpc_tasks(bootapi, settings, xmlrpc_port): + do_xmlrpc_rw(bootapi, settings, xmlrpc_port) + +#def do_other_tasks(bootapi, settings, syslog_port, logger): +# +# # FUTURE: this should also start the Web UI, if the dependencies +# # are available. +# +# if os.path.exists("/usr/bin/avahi-publish-service"): +# pid2 = os.fork() +# if pid2 == 0: +# 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) def log(logger,msg): @@ -122,59 +93,24 @@ def log(logger,msg): else: print >>sys.stderr, msg -def do_avahi(bootapi, settings, logger): - # publish via zeroconf. This command will not terminate - log(logger, "publishing avahi service") - cmd = [ "/usr/bin/avahi-publish-service", - "cobblerd", - "_http._tcp", - "%s" % settings.xmlrpc_port ] - proc = sub_process.Popen(cmd, shell=False, stderr=sub_process.PIPE, stdout=sub_process.PIPE, close_fds=True) - proc.communicate()[0] - log(logger, "avahi service terminated") - - -def do_xmlrpc(bootapi, settings, port, logger): - - # This is the simple XMLRPC API we provide to koan and other - # apps that do not need to manage Cobbler's config - - xinterface = remote.ProxiedXMLRPCInterface(bootapi,logger,remote.CobblerXMLRPCInterface,False) - - server = remote.CobblerXMLRPCServer(('', port)) - server.logRequests = 0 # don't print stuff - log(logger, "XMLRPC running on %s" % port) - server.register_instance(xinterface) - - while True: - try: - server.serve_forever() - except IOError: - # interrupted? try to serve again - time.sleep(0.5) - -def do_xmlrpc_rw(bootapi,settings,port,logger): - - xinterface = remote.ProxiedXMLRPCInterface(bootapi,logger,remote.CobblerReadWriteXMLRPCInterface,True) - server = remote.CobblerReadWriteXMLRPCServer(('127.0.0.1', port)) - server.logRequests = 0 # don't print stuff - logger.debug("XMLRPC (read-write variant) running on %s" % port) - server.register_instance(xinterface) +#def do_avahi(bootapi, settings, logger): +# # publish via zeroconf. This command will not terminate +# log(logger, "publishing avahi service") +# cmd = [ "/usr/bin/avahi-publish-service", +# "cobblerd", +# "_http._tcp", +# "%s" % settings.xmlrpc_port ] +# proc = sub_process.Popen(cmd, shell=False, stderr=sub_process.PIPE, stdout=sub_process.PIPE, close_fds=True) +# proc.communicate()[0] +# log(logger, "avahi service terminated") - while True: - try: - server.serve_forever() - except IOError: - # interrupted? try to serve again - time.sleep(0.5) -def do_xmlrpc_unix(bootapi,settings,logger): +def do_xmlrpc_rw(bootapi,settings,port): - xinterface = remote.ProxiedXMLRPCInterface(bootapi,logger,remote.CobblerReadWriteXMLRPCInterface,True) - SOCKT = "/var/lib/cobbler/sock" - server = xmlrpclib2.UnixXMLRPCServer(SOCKT) + xinterface = remote.ProxiedXMLRPCInterface(bootapi,remote.CobblerXMLRPCInterface,True) + server = remote.CobblerXMLRPCServer(('127.0.0.1', port)) server.logRequests = 0 # don't print stuff - logger.debug("XMLRPC (socket variant) available on %s" % SOCKT) + #logger.debug("XMLRPC running on %s" % port) server.register_instance(xinterface) while True: @@ -184,44 +120,6 @@ def do_xmlrpc_unix(bootapi,settings,logger): # interrupted? try to serve again time.sleep(0.5) -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 - - while 1: - data, addr = s.recvfrom(buf) - (ip, port) = addr - system = bootapi.systems().find(ip_address = ip) - if not system: - usename = ip - else: - usename = system.name - - if not data: - break - else: - logfile = open("/var/log/cobbler/syslog/%s" % usename, "a+") - t = time.localtime() - # write numeric time - seconds = str(time.mktime(t)) - logfile.write(seconds) - logfile.write("\t") - # write string time - timestr = str(time.asctime(t)) - logfile.write(timestr) - logfile.write("\t") - # write the IP address of the client - logfile.write(ip) - logfile.write("\t") - # write the data - logfile.write(data) - logfile.write("\n") - logfile.close() - if __name__ == "__main__": #main() |