Revision 3986684e Ganeti/HTools/Rapi.hs

b/Ganeti/HTools/Rapi.hs
31 31
    , parseData
32 32
    ) where
33 33

  
34
import Data.Maybe (isJust)
34
import Data.Maybe (fromMaybe)
35 35
import Network.Curl
36 36
import Network.Curl.Types ()
37 37
import Control.Monad
......
120 120
parseNode :: NameAssoc -> [(String, JSValue)] -> Result (String, Node.Node)
121 121
parseNode ktg a = do
122 122
  name <- tryFromObj "Parsing new node" a "name"
123
  let extract s = tryFromObj ("Node '" ++ name ++ "'") a s
123
  let desc = "Node '" ++ name ++ "'"
124
      extract s = tryFromObj desc a s
124 125
  offline <- extract "offline"
125 126
  drained <- extract "drained"
126
  guuid   <- (if isJust $ lookup "group.uuid" a
127
             then extract "group.uuid"
128
             else return defaultGroupID) >>= lookupGroup ktg name
129
  node <- (if offline || drained
130
           then return $ Node.create name 0 0 0 0 0 0 True guuid
127
  vm_cap  <- annotateResult desc $ maybeFromObj a "vm_capable"
128
  let vm_cap' = fromMaybe True vm_cap
129
  guuid   <- annotateResult desc $ maybeFromObj a "group.uuid"
130
  guuid' <-  lookupGroup ktg name (fromMaybe defaultGroupID guuid)
131
  node <- (if offline || drained || not vm_cap'
132
           then return $ Node.create name 0 0 0 0 0 0 True guuid'
131 133
           else do
132 134
             mtotal  <- extract "mtotal"
133 135
             mnode   <- extract "mnode"
......
136 138
             dfree   <- extract "dfree"
137 139
             ctotal  <- extract "ctotal"
138 140
             return $ Node.create name mtotal mnode mfree
139
                    dtotal dfree ctotal False guuid)
141
                    dtotal dfree ctotal False guuid')
140 142
  return (name, node)
141 143

  
142 144
-- | Construct a group from a JSON object.

Also available in: Unified diff