Revision 1c31b263
b/lib/constants.py | ||
---|---|---|
203 | 203 |
# These are the extra logfiles, grouped by daemon |
204 | 204 |
DAEMONS_EXTRA_LOGBASE = { |
205 | 205 |
MOND: { |
206 |
EXTRA_LOGREASON_ACCESS: "monitoring-daemon-access",
|
|
207 |
EXTRA_LOGREASON_ERROR: "monitoring-daemon-error",
|
|
206 |
EXTRA_LOGREASON_ACCESS: _constants.EXTRA_LOGREASON_ACCESS,
|
|
207 |
EXTRA_LOGREASON_ERROR: _constants.EXTRA_LOGREASON_ERROR,
|
|
208 | 208 |
} |
209 | 209 |
} |
210 | 210 |
|
b/src/Ganeti/ConstantUtils.hs | ||
---|---|---|
63 | 63 |
instance PyValue Protocol where |
64 | 64 |
showValue Tcp = "\"tcp\"" |
65 | 65 |
showValue Udp = "\"udp\"" |
66 |
|
|
67 |
-- | Failure exit code |
|
68 |
-- |
|
69 |
-- This is defined here and not in 'Ganeti.HsConstants' together with |
|
70 |
-- the other exit codes in order to avoid a circular dependency |
|
71 |
-- between 'Ganeti.HsConstants' and 'Ganeti.Runtime' |
|
72 |
exitFailure :: Int |
|
73 |
exitFailure = 1 |
b/src/Ganeti/HsConstants.hs | ||
---|---|---|
40 | 40 |
import qualified Data.Map as Map (fromList) |
41 | 41 |
|
42 | 42 |
import AutoConf |
43 |
import Ganeti.ConstantUtils |
|
43 |
import Ganeti.ConstantUtils (FrozenSet, Protocol(..)) |
|
44 |
import qualified Ganeti.ConstantUtils as ConstantUtils (mkSet, exitFailure) |
|
45 |
import Ganeti.Runtime (GanetiDaemon(..), MiscGroup(..), GanetiGroup(..), |
|
46 |
ExtraLogReason(..)) |
|
47 |
import qualified Ganeti.Runtime as Runtime |
|
44 | 48 |
|
45 | 49 |
-- * Admin states |
46 | 50 |
|
... | ... | |
59 | 63 |
-- * User separation |
60 | 64 |
|
61 | 65 |
daemonsGroup :: String |
62 |
daemonsGroup = AutoConf.daemonsGroup
|
|
66 |
daemonsGroup = Runtime.daemonGroup (ExtraGroup DaemonsGroup)
|
|
63 | 67 |
|
64 | 68 |
adminGroup :: String |
65 |
adminGroup = AutoConf.adminGroup
|
|
69 |
adminGroup = Runtime.daemonGroup (ExtraGroup AdminGroup)
|
|
66 | 70 |
|
67 | 71 |
masterdUser :: String |
68 |
masterdUser = AutoConf.masterdUser
|
|
72 |
masterdUser = Runtime.daemonUser GanetiMasterd
|
|
69 | 73 |
|
70 | 74 |
masterdGroup :: String |
71 |
masterdGroup = AutoConf.masterdGroup
|
|
75 |
masterdGroup = Runtime.daemonGroup (DaemonGroup GanetiMasterd)
|
|
72 | 76 |
|
73 | 77 |
rapiUser :: String |
74 |
rapiUser = AutoConf.rapiUser
|
|
78 |
rapiUser = Runtime.daemonUser GanetiRapi
|
|
75 | 79 |
|
76 | 80 |
rapiGroup :: String |
77 |
rapiGroup = AutoConf.rapiGroup
|
|
81 |
rapiGroup = Runtime.daemonGroup (DaemonGroup GanetiRapi)
|
|
78 | 82 |
|
79 | 83 |
confdUser :: String |
80 |
confdUser = AutoConf.confdUser
|
|
84 |
confdUser = Runtime.daemonUser GanetiConfd
|
|
81 | 85 |
|
82 | 86 |
confdGroup :: String |
83 |
confdGroup = AutoConf.confdGroup
|
|
87 |
confdGroup = Runtime.daemonGroup (DaemonGroup GanetiConfd)
|
|
84 | 88 |
|
85 | 89 |
luxidUser :: String |
86 |
luxidUser = AutoConf.luxidUser
|
|
90 |
luxidUser = Runtime.daemonUser GanetiLuxid
|
|
87 | 91 |
|
88 | 92 |
luxidGroup :: String |
89 |
luxidGroup = AutoConf.luxidGroup
|
|
93 |
luxidGroup = Runtime.daemonGroup (DaemonGroup GanetiLuxid)
|
|
90 | 94 |
|
91 | 95 |
nodedUser :: String |
92 |
nodedUser = AutoConf.nodedUser
|
|
96 |
nodedUser = Runtime.daemonUser GanetiNoded
|
|
93 | 97 |
|
94 | 98 |
nodedGroup :: String |
95 |
nodedGroup = AutoConf.nodedGroup
|
|
99 |
nodedGroup = Runtime.daemonGroup (DaemonGroup GanetiNoded)
|
|
96 | 100 |
|
97 | 101 |
mondUser :: String |
98 |
mondUser = AutoConf.mondUser
|
|
102 |
mondUser = Runtime.daemonUser GanetiMond
|
|
99 | 103 |
|
100 | 104 |
mondGroup :: String |
101 |
mondGroup = AutoConf.mondGroup
|
|
105 |
mondGroup = Runtime.daemonGroup (DaemonGroup GanetiMond)
|
|
102 | 106 |
|
103 | 107 |
sshLoginUser :: String |
104 | 108 |
sshLoginUser = AutoConf.sshLoginUser |
... | ... | |
117 | 121 |
-- * Daemons |
118 | 122 |
|
119 | 123 |
confd :: String |
120 |
confd = "ganeti-confd"
|
|
124 |
confd = Runtime.daemonName GanetiConfd
|
|
121 | 125 |
|
122 | 126 |
masterd :: String |
123 |
masterd = "ganeti-masterd"
|
|
127 |
masterd = Runtime.daemonName GanetiMasterd
|
|
124 | 128 |
|
125 | 129 |
mond :: String |
126 |
mond = "ganeti-mond"
|
|
130 |
mond = Runtime.daemonName GanetiMond
|
|
127 | 131 |
|
128 | 132 |
noded :: String |
129 |
noded = "ganeti-noded"
|
|
133 |
noded = Runtime.daemonName GanetiNoded
|
|
130 | 134 |
|
131 | 135 |
luxid :: String |
132 |
luxid = "ganeti-luxid"
|
|
136 |
luxid = Runtime.daemonName GanetiLuxid
|
|
133 | 137 |
|
134 | 138 |
rapi :: String |
135 |
rapi = "ganeti-rapi"
|
|
139 |
rapi = Runtime.daemonName GanetiRapi
|
|
136 | 140 |
|
137 | 141 |
daemons :: FrozenSet String |
138 | 142 |
daemons = |
... | ... | |
163 | 167 |
(rapi, (Tcp, defaultRapiPort)), |
164 | 168 |
(ssh, (Tcp, 22))] |
165 | 169 |
|
170 |
extraLogreasonAccess :: String |
|
171 |
extraLogreasonAccess = Runtime.daemonsExtraLogbase GanetiMond AccessLog |
|
172 |
|
|
173 |
extraLogreasonError :: String |
|
174 |
extraLogreasonError = Runtime.daemonsExtraLogbase GanetiMond ErrorLog |
|
175 |
|
|
166 | 176 |
-- * Possible values for NodeGroup.alloc_policy |
167 | 177 |
|
168 | 178 |
allocPolicyLastResort :: String |
b/src/Ganeti/Luxi.hs | ||
---|---|---|
76 | 76 |
import Ganeti.JSON |
77 | 77 |
import Ganeti.OpParams (pTagsObject) |
78 | 78 |
import Ganeti.OpCodes |
79 |
import Ganeti.Runtime |
|
80 | 79 |
import qualified Ganeti.Query.Language as Qlang |
80 |
import Ganeti.Runtime (GanetiDaemon(..), MiscGroup(..), GanetiGroup(..)) |
|
81 | 81 |
import Ganeti.THH |
82 | 82 |
import Ganeti.Types |
83 | 83 |
import Ganeti.Utils |
b/src/Ganeti/Monitoring/Server.hs | ||
---|---|---|
117 | 117 |
-- | Prepare function for monitoring agent. |
118 | 118 |
prepMain :: PrepFn CheckResult PrepResult |
119 | 119 |
prepMain opts _ = do |
120 |
mAccessLog <- daemonsExtraLogFile GanetiMond AccessLog |
|
121 |
mErrorLog <- daemonsExtraLogFile GanetiMond ErrorLog |
|
122 |
case (mAccessLog, mErrorLog) of |
|
123 |
(Just accessLog, Just errorLog) -> |
|
124 |
return $ |
|
125 |
setPort |
|
126 |
(maybe C.defaultMondPort fromIntegral (optPort opts)) |
|
127 |
(defaultHttpConf accessLog errorLog) |
|
128 |
_ -> fail "Failed to retrieve extra log filepaths for the monitoring daemon" |
|
120 |
accessLog <- daemonsExtraLogFile GanetiMond AccessLog |
|
121 |
errorLog <- daemonsExtraLogFile GanetiMond ErrorLog |
|
122 |
return $ |
|
123 |
setPort |
|
124 |
(maybe C.defaultMondPort fromIntegral (optPort opts)) |
|
125 |
(defaultHttpConf accessLog errorLog) |
|
129 | 126 |
|
130 | 127 |
-- * Query answers |
131 | 128 |
|
b/src/Ganeti/Runtime.hs | ||
---|---|---|
30 | 30 |
, RuntimeEnts |
31 | 31 |
, daemonName |
32 | 32 |
, daemonOnlyOnMaster |
33 |
, daemonLogBase |
|
33 | 34 |
, daemonUser |
34 | 35 |
, daemonGroup |
35 | 36 |
, ExtraLogReason(..) |
36 | 37 |
, daemonLogFile |
38 |
, daemonsExtraLogbase |
|
37 | 39 |
, daemonsExtraLogFile |
38 | 40 |
, daemonPidFile |
39 | 41 |
, getEnts |
... | ... | |
51 | 53 |
import System.Posix.User |
52 | 54 |
import Text.Printf |
53 | 55 |
|
54 |
import qualified Ganeti.Constants as C
|
|
56 |
import qualified Ganeti.ConstantUtils as ConstantUtils
|
|
55 | 57 |
import qualified Ganeti.Path as Path |
56 | 58 |
import Ganeti.BasicTypes |
57 | 59 |
|
60 |
import AutoConf |
|
61 |
|
|
58 | 62 |
data GanetiDaemon = GanetiMasterd |
59 | 63 |
| GanetiNoded |
60 | 64 |
| GanetiRapi |
... | ... | |
75 | 79 |
|
76 | 80 |
-- | Returns the daemon name for a given daemon. |
77 | 81 |
daemonName :: GanetiDaemon -> String |
78 |
daemonName GanetiMasterd = C.masterd
|
|
79 |
daemonName GanetiNoded = C.noded
|
|
80 |
daemonName GanetiRapi = C.rapi
|
|
81 |
daemonName GanetiConfd = C.confd
|
|
82 |
daemonName GanetiLuxid = C.luxid
|
|
83 |
daemonName GanetiMond = C.mond
|
|
82 |
daemonName GanetiMasterd = "ganeti-masterd"
|
|
83 |
daemonName GanetiNoded = "ganeti-noded"
|
|
84 |
daemonName GanetiRapi = "ganeti-rapi"
|
|
85 |
daemonName GanetiConfd = "ganeti-confd"
|
|
86 |
daemonName GanetiLuxid = "ganeti-luxid"
|
|
87 |
daemonName GanetiMond = "ganeti-mond"
|
|
84 | 88 |
|
85 | 89 |
-- | Returns whether the daemon only runs on the master node. |
86 | 90 |
daemonOnlyOnMaster :: GanetiDaemon -> Bool |
... | ... | |
93 | 97 |
|
94 | 98 |
-- | Returns the log file base for a daemon. |
95 | 99 |
daemonLogBase :: GanetiDaemon -> String |
96 |
daemonLogBase GanetiMasterd = C.daemonsLogbaseGanetiMasterd
|
|
97 |
daemonLogBase GanetiNoded = C.daemonsLogbaseGanetiNoded
|
|
98 |
daemonLogBase GanetiRapi = C.daemonsLogbaseGanetiRapi
|
|
99 |
daemonLogBase GanetiConfd = C.daemonsLogbaseGanetiConfd
|
|
100 |
daemonLogBase GanetiLuxid = C.daemonsLogbaseGanetiLuxid
|
|
101 |
daemonLogBase GanetiMond = C.daemonsLogbaseGanetiMond
|
|
100 |
daemonLogBase GanetiMasterd = "master-daemon"
|
|
101 |
daemonLogBase GanetiNoded = "node-daemon"
|
|
102 |
daemonLogBase GanetiRapi = "rapi-daemon"
|
|
103 |
daemonLogBase GanetiConfd = "conf-daemon"
|
|
104 |
daemonLogBase GanetiLuxid = "luxi-daemon"
|
|
105 |
daemonLogBase GanetiMond = "monitoring-daemon"
|
|
102 | 106 |
|
103 | 107 |
-- | Returns the configured user name for a daemon. |
104 | 108 |
daemonUser :: GanetiDaemon -> String |
105 |
daemonUser GanetiMasterd = C.masterdUser
|
|
106 |
daemonUser GanetiNoded = C.nodedUser
|
|
107 |
daemonUser GanetiRapi = C.rapiUser
|
|
108 |
daemonUser GanetiConfd = C.confdUser
|
|
109 |
daemonUser GanetiLuxid = C.luxidUser
|
|
110 |
daemonUser GanetiMond = C.mondUser
|
|
109 |
daemonUser GanetiMasterd = AutoConf.masterdUser
|
|
110 |
daemonUser GanetiNoded = AutoConf.nodedUser
|
|
111 |
daemonUser GanetiRapi = AutoConf.rapiUser
|
|
112 |
daemonUser GanetiConfd = AutoConf.confdUser
|
|
113 |
daemonUser GanetiLuxid = AutoConf.luxidUser
|
|
114 |
daemonUser GanetiMond = AutoConf.mondUser
|
|
111 | 115 |
|
112 | 116 |
-- | Returns the configured group for a daemon. |
113 | 117 |
daemonGroup :: GanetiGroup -> String |
114 |
daemonGroup (DaemonGroup GanetiMasterd) = C.masterdGroup
|
|
115 |
daemonGroup (DaemonGroup GanetiNoded) = C.nodedGroup
|
|
116 |
daemonGroup (DaemonGroup GanetiRapi) = C.rapiGroup
|
|
117 |
daemonGroup (DaemonGroup GanetiConfd) = C.confdGroup
|
|
118 |
daemonGroup (DaemonGroup GanetiLuxid) = C.luxidGroup
|
|
119 |
daemonGroup (DaemonGroup GanetiMond) = C.mondGroup
|
|
120 |
daemonGroup (ExtraGroup DaemonsGroup) = C.daemonsGroup
|
|
121 |
daemonGroup (ExtraGroup AdminGroup) = C.adminGroup
|
|
118 |
daemonGroup (DaemonGroup GanetiMasterd) = AutoConf.masterdGroup
|
|
119 |
daemonGroup (DaemonGroup GanetiNoded) = AutoConf.nodedGroup
|
|
120 |
daemonGroup (DaemonGroup GanetiRapi) = AutoConf.rapiGroup
|
|
121 |
daemonGroup (DaemonGroup GanetiConfd) = AutoConf.confdGroup
|
|
122 |
daemonGroup (DaemonGroup GanetiLuxid) = AutoConf.luxidGroup
|
|
123 |
daemonGroup (DaemonGroup GanetiMond) = AutoConf.mondGroup
|
|
124 |
daemonGroup (ExtraGroup DaemonsGroup) = AutoConf.daemonsGroup
|
|
125 |
daemonGroup (ExtraGroup AdminGroup) = AutoConf.adminGroup
|
|
122 | 126 |
|
123 | 127 |
data ExtraLogReason = AccessLog | ErrorLog |
124 | 128 |
|
125 |
daemonsExtraLogbase :: GanetiDaemon -> ExtraLogReason -> Maybe String |
|
126 |
daemonsExtraLogbase GanetiMond AccessLog = |
|
127 |
Just C.daemonsExtraLogbaseGanetiMondAccess |
|
128 |
|
|
129 |
daemonsExtraLogbase GanetiMond ErrorLog = |
|
130 |
Just C.daemonsExtraLogbaseGanetiMondError |
|
131 |
|
|
132 |
daemonsExtraLogbase _ _ = Nothing |
|
129 |
daemonsExtraLogbase :: GanetiDaemon -> ExtraLogReason -> String |
|
130 |
daemonsExtraLogbase daemon AccessLog = daemonLogBase daemon ++ "-access" |
|
131 |
daemonsExtraLogbase daemon ErrorLog = daemonLogBase daemon ++ "-error" |
|
133 | 132 |
|
134 | 133 |
-- | Returns the log file for a daemon. |
135 | 134 |
daemonLogFile :: GanetiDaemon -> IO FilePath |
... | ... | |
137 | 136 |
logDir <- Path.logDir |
138 | 137 |
return $ logDir </> daemonLogBase daemon <.> "log" |
139 | 138 |
|
140 |
daemonsExtraLogFile :: GanetiDaemon -> ExtraLogReason -> IO (Maybe FilePath) |
|
139 |
-- | Returns the extra log files for a daemon. |
|
140 |
daemonsExtraLogFile :: GanetiDaemon -> ExtraLogReason -> IO FilePath |
|
141 | 141 |
daemonsExtraLogFile daemon logreason = do |
142 | 142 |
logDir <- Path.logDir |
143 |
case daemonsExtraLogbase daemon logreason of |
|
144 |
Nothing -> return Nothing |
|
145 |
Just logbase -> return . Just $ logDir </> logbase <.> "log" |
|
143 |
return $ logDir </> daemonsExtraLogbase daemon logreason <.> "log" |
|
146 | 144 |
|
147 | 145 |
-- | Returns the pid file name for a daemon. |
148 | 146 |
daemonPidFile :: GanetiDaemon -> IO FilePath |
... | ... | |
202 | 200 |
\expected %d\n" name |
203 | 201 |
(fromIntegral actual::Int) |
204 | 202 |
(fromIntegral expected::Int) :: IO () |
205 |
exitWith $ ExitFailure C.exitFailure |
|
203 |
exitWith $ ExitFailure ConstantUtils.exitFailure |
Also available in: Unified diff