Add command line option for controlling syslog use
authorIustin Pop <iustin@google.com>
Wed, 21 Mar 2012 16:48:07 +0000 (16:48 +0000)
committerIustin Pop <iustin@google.com>
Thu, 22 Mar 2012 13:58:52 +0000 (13:58 +0000)
… and enable it in hconfd.

Signed-off-by: Iustin Pop <iustin@google.com>
Reviewed-by: René Nussbaumer <rn@google.com>

htools/Ganeti/Daemon.hs
htools/hconfd.hs

index d3f58f6..15583be 100644 (file)
@@ -34,6 +34,7 @@ module Ganeti.Daemon
   , oDebug
   , oPort
   , oBindAddress
+  , oSyslogUsage
   , parseArgs
   , parseAddress
   , writePidFile
@@ -75,6 +76,7 @@ data DaemonOptions = DaemonOptions
   , optDebug        :: Bool           -- ^ Enable debug messages
   , optNoUserChecks :: Bool           -- ^ Ignore user checks
   , optBindAddress  :: Maybe String   -- ^ Override for the bind address
+  , optSyslogUsage  :: Maybe SyslogUsage -- ^ Override for Syslog usage
   }
 
 -- | Default values for the command line options.
@@ -87,6 +89,7 @@ defaultOptions  = DaemonOptions
   , optDebug        = False
   , optNoUserChecks = False
   , optBindAddress  = Nothing
+  , optSyslogUsage  = Nothing
   }
 
 -- | Abrreviation for the option type.
@@ -142,6 +145,15 @@ oBindAddress = Option "b" ["bind"]
                 "ADDR")
                "Bind address (default depends on cluster configuration)"
 
+oSyslogUsage :: OptType
+oSyslogUsage = Option "" ["syslog"]
+               (reqWithConversion syslogUsageFromRaw
+                (\su opts -> Ok opts { optSyslogUsage = Just su })
+                "SYSLOG")
+               ("Enable logging to syslog (except debug \
+                \messages); one of 'no', 'yes' or 'only' [" ++ C.syslogUsage ++
+                "]")
+
 -- | Usage info.
 usageHelp :: String -> [OptType] -> String
 usageHelp progname =
@@ -291,16 +303,21 @@ genericMain daemon options main = do
         exitWith $ ExitFailure C.exitFailure
       Ok ents -> verifyDaemonUser daemon ents
 
+  syslog <- case optSyslogUsage opts of
+              Nothing -> exitIfBad $
+                         annotateResult "Invalid cluster syslog setting" $
+                         syslogUsageFromRaw C.syslogUsage
+              Just v -> return v
   let processFn = if optDaemonize opts then daemonize else id
-  processFn $ innerMain daemon opts (main opts)
+  processFn $ innerMain daemon opts syslog (main opts)
 
 -- | Inner daemon function.
 --
 -- This is executed after daemonization.
-innerMain :: GanetiDaemon -> DaemonOptions -> IO () -> IO ()
-innerMain daemon opts main = do
+innerMain :: GanetiDaemon -> DaemonOptions -> SyslogUsage -> IO () -> IO ()
+innerMain daemon opts syslog main = do
   setupLogging (daemonLogFile daemon) (daemonName daemon) (optDebug opts)
-                 (not (optDaemonize opts)) False SyslogNo
+                 (not (optDaemonize opts)) False syslog
   pid_fd <- writePidFile (daemonPidFile daemon)
   case pid_fd of
     Bad msg -> do
index d544a6c..32d1208 100644 (file)
@@ -40,6 +40,7 @@ options =
   , oDebug
   , oPort C.defaultConfdPort
   , oBindAddress
+  , oSyslogUsage
   ]
 
 -- | Main function.