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