Switch RAPI to default ganeti logging and Daemonize it with ganeti.utils
[ganeti-local] / daemons / ganeti-rapi
index 9825bbf..834c957 100755 (executable)
 """
 
 import glob
-import logging
 import optparse
 import sys
 import os
 
-import ganeti.rapi.RESTHTTPServer
+from ganeti import constants
+from ganeti import utils
+from ganeti.rapi import RESTHTTPServer
 
 RELEASE_VERSION = 0.01
 API_PORT = 5080
@@ -59,6 +60,10 @@ def ParseOptions():
   parser.add_option("-C", "--ssl-cert", dest="ssl_cert",
                     help="SSL certificate",
                     default=None, type="string")
+  parser.add_option("-f", "--foreground", dest="fork",
+                    help="Don't detach from the current terminal",
+                    default=True, action="store_false")
+
   options, args = parser.parse_args()
 
   if len(args) != 1 or args[0] not in ("start", "stop"):
@@ -67,8 +72,8 @@ def ParseOptions():
 
   if options.ssl:
     if not (options.ssl_cert and options.ssl_key):
-      print >> sys.stderr, "For secure mode please provide " \
-                        "--ssl-key and --ssl-cert arguments"
+      print >> sys.stderr, ("For secure mode please provide "
+                           "--ssl-key and --ssl-cert arguments")
       sys.exit(1)
 
   return options, args
@@ -84,7 +89,7 @@ def Port2PID(port):
     PID number.
   """
 
-  _NET_STAT = ['/proc/net/tcp','/proc/net/udp']
+  _NET_STAT = ['/proc/net/tcp', '/proc/net/udp']
 
   inode2port = {}
   port2pid = {}
@@ -128,34 +133,9 @@ def StartAPI(options):
   Return:
     Exit code.
   """
-  # do the UNIX double-fork magic
-  try:
-    pid = os.fork()
-    if pid > 0:
-      # exit first parent
-      sys.exit(0)
-  except OSError, e:
-    print >> sys.stderr, "fork #1 failed: %d (%s)" % (e.errno, e.strerror)
-    return 1
-
-  # decouple from parent environment
-  os.chdir("/")
-  os.setsid()
-  os.umask(0)
-
-  # do second fork
-  try:
-    pid = os.fork()
-    if pid > 0:
-      # exit from second parent, print eventual PID before
-      print "Ganeti-RAPI PID: %d port: %d" % (pid, options.port)
-      return 0
-  except OSError, e:
-    print >> sys.stderr, "fork #2 failed: %d (%s)" % (e.errno, e.strerror)
-    return 1
-
-  # start the daemon main loop
-  ganeti.rapi.RESTHTTPServer.start(options)
+  if options.fork:
+    utils.Daemonize(logfile=constants.LOG_RAPISERVER)
+  RESTHTTPServer.start(options)
 
 
 def StopAPI(options):
@@ -163,8 +143,8 @@ def StopAPI(options):
   try:
     pid = Port2PID(options.port)
     if pid:
-      print "Stopping Ganeti-RAPI PID: %d, port: %d... " \
-          % (pid, options.port),
+      print ("Stopping Ganeti-RAPI PID: %d, port: %d... "
+             % (pid, options.port)),
       os.kill(pid, 9)
       print "done."
     else: