34 |
34 |
, oDebug
|
35 |
35 |
, oPort
|
36 |
36 |
, oBindAddress
|
|
37 |
, oSyslogUsage
|
37 |
38 |
, parseArgs
|
38 |
39 |
, parseAddress
|
39 |
40 |
, writePidFile
|
... | ... | |
75 |
76 |
, optDebug :: Bool -- ^ Enable debug messages
|
76 |
77 |
, optNoUserChecks :: Bool -- ^ Ignore user checks
|
77 |
78 |
, optBindAddress :: Maybe String -- ^ Override for the bind address
|
|
79 |
, optSyslogUsage :: Maybe SyslogUsage -- ^ Override for Syslog usage
|
78 |
80 |
}
|
79 |
81 |
|
80 |
82 |
-- | Default values for the command line options.
|
... | ... | |
87 |
89 |
, optDebug = False
|
88 |
90 |
, optNoUserChecks = False
|
89 |
91 |
, optBindAddress = Nothing
|
|
92 |
, optSyslogUsage = Nothing
|
90 |
93 |
}
|
91 |
94 |
|
92 |
95 |
-- | Abrreviation for the option type.
|
... | ... | |
142 |
145 |
"ADDR")
|
143 |
146 |
"Bind address (default depends on cluster configuration)"
|
144 |
147 |
|
|
148 |
oSyslogUsage :: OptType
|
|
149 |
oSyslogUsage = Option "" ["syslog"]
|
|
150 |
(reqWithConversion syslogUsageFromRaw
|
|
151 |
(\su opts -> Ok opts { optSyslogUsage = Just su })
|
|
152 |
"SYSLOG")
|
|
153 |
("Enable logging to syslog (except debug \
|
|
154 |
\messages); one of 'no', 'yes' or 'only' [" ++ C.syslogUsage ++
|
|
155 |
"]")
|
|
156 |
|
145 |
157 |
-- | Usage info.
|
146 |
158 |
usageHelp :: String -> [OptType] -> String
|
147 |
159 |
usageHelp progname =
|
... | ... | |
291 |
303 |
exitWith $ ExitFailure C.exitFailure
|
292 |
304 |
Ok ents -> verifyDaemonUser daemon ents
|
293 |
305 |
|
|
306 |
syslog <- case optSyslogUsage opts of
|
|
307 |
Nothing -> exitIfBad $
|
|
308 |
annotateResult "Invalid cluster syslog setting" $
|
|
309 |
syslogUsageFromRaw C.syslogUsage
|
|
310 |
Just v -> return v
|
294 |
311 |
let processFn = if optDaemonize opts then daemonize else id
|
295 |
|
processFn $ innerMain daemon opts (main opts)
|
|
312 |
processFn $ innerMain daemon opts syslog (main opts)
|
296 |
313 |
|
297 |
314 |
-- | Inner daemon function.
|
298 |
315 |
--
|
299 |
316 |
-- This is executed after daemonization.
|
300 |
|
innerMain :: GanetiDaemon -> DaemonOptions -> IO () -> IO ()
|
301 |
|
innerMain daemon opts main = do
|
|
317 |
innerMain :: GanetiDaemon -> DaemonOptions -> SyslogUsage -> IO () -> IO ()
|
|
318 |
innerMain daemon opts syslog main = do
|
302 |
319 |
setupLogging (daemonLogFile daemon) (daemonName daemon) (optDebug opts)
|
303 |
|
(not (optDaemonize opts)) False SyslogNo
|
|
320 |
(not (optDaemonize opts)) False syslog
|
304 |
321 |
pid_fd <- writePidFile (daemonPidFile daemon)
|
305 |
322 |
case pid_fd of
|
306 |
323 |
Bad msg -> do
|