Revision 1c3231aa src/Ganeti/Confd/Server.hs
b/src/Ganeti/Confd/Server.hs | ||
---|---|---|
59 | 59 |
import qualified Ganeti.Constants as C |
60 | 60 |
import qualified Ganeti.Path as Path |
61 | 61 |
import Ganeti.Query.Server (prepQueryD, runQueryD) |
62 |
import qualified Ganeti.Query.Cluster as QCluster |
|
62 | 63 |
import Ganeti.Utils |
63 | 64 |
|
64 | 65 |
-- * Types and constants definitions |
... | ... | |
137 | 138 |
|
138 | 139 |
-- | Computes the node role. |
139 | 140 |
nodeRole :: ConfigData -> String -> Result ConfdNodeRole |
140 |
nodeRole cfg name = |
|
141 |
let cmaster = clusterMasterNode . configCluster $ cfg
|
|
142 |
mnode = M.lookup name . fromContainer . configNodes $ cfg
|
|
143 |
in case mnode of
|
|
144 |
Nothing -> Bad "Node not found"
|
|
145 |
Just node | cmaster == name -> Ok NodeRoleMaster
|
|
146 |
| nodeDrained node -> Ok NodeRoleDrained
|
|
147 |
| nodeOffline node -> Ok NodeRoleOffline
|
|
148 |
| nodeMasterCandidate node -> Ok NodeRoleCandidate
|
|
149 |
_ -> Ok NodeRoleRegular
|
|
141 |
nodeRole cfg name = do
|
|
142 |
cmaster <- errToResult $ QCluster.clusterMasterNodeName cfg
|
|
143 |
mnode <- errToResult $ getNode cfg name
|
|
144 |
let role = case mnode of
|
|
145 |
node | cmaster == name -> NodeRoleMaster
|
|
146 |
| nodeDrained node -> NodeRoleDrained
|
|
147 |
| nodeOffline node -> NodeRoleOffline
|
|
148 |
| nodeMasterCandidate node -> NodeRoleCandidate
|
|
149 |
_ -> NodeRoleRegular
|
|
150 |
return role
|
|
150 | 151 |
|
151 | 152 |
-- | Does an instance ip -> instance -> primary node -> primary ip |
152 | 153 |
-- transformation. |
... | ... | |
170 | 171 |
|
171 | 172 |
buildResponse cdata req@(ConfdRequest { confdRqType = ReqClusterMaster }) = |
172 | 173 |
case confdRqQuery req of |
173 |
EmptyQuery -> return (ReplyStatusOk, J.showJSON master_name)
|
|
174 |
EmptyQuery -> liftM ((,) ReplyStatusOk . J.showJSON) master_name
|
|
174 | 175 |
PlainQuery _ -> return queryArgumentError |
175 | 176 |
DictQuery reqq -> do |
176 |
mnode <- gntErrorToResult $ getNode cfg master_name |
|
177 |
mnode <- gntErrorToResult $ getNode cfg master_uuid |
|
178 |
mname <- master_name |
|
177 | 179 |
let fvals = map (\field -> case field of |
178 |
ReqFieldName -> master_name
|
|
180 |
ReqFieldName -> mname |
|
179 | 181 |
ReqFieldIp -> clusterMasterIp cluster |
180 | 182 |
ReqFieldMNodePip -> nodePrimaryIp mnode |
181 | 183 |
) (confdReqQFields reqq) |
182 | 184 |
return (ReplyStatusOk, J.showJSON fvals) |
183 |
where master_name = clusterMasterNode cluster |
|
185 |
where master_uuid = clusterMasterNode cluster |
|
186 |
master_name = errToResult $ QCluster.clusterMasterNodeName cfg |
|
184 | 187 |
cluster = configCluster cfg |
185 | 188 |
cfg = fst cdata |
186 | 189 |
|
Also available in: Unified diff