Revision df5227dc

b/htools/Ganeti/HTools/IAlloc.hs
38 38
import qualified Ganeti.HTools.Group as Group
39 39
import qualified Ganeti.HTools.Node as Node
40 40
import qualified Ganeti.HTools.Instance as Instance
41
import qualified Ganeti.Constants as C
41 42
import Ganeti.HTools.Loader
42 43
import Ganeti.HTools.Utils
43 44
import Ganeti.HTools.Types
......
144 145
  let map_n = cdNodes cdata
145 146
  optype <- extrReq "type"
146 147
  rqtype <-
147
      case optype of
148
        "allocate" ->
149
            do
150
              rname     <- extrReq "name"
151
              req_nodes <- extrReq "required_nodes"
152
              inew      <- parseBaseInstance rname request
153
              let io = snd inew
154
              return $ Allocate io req_nodes
155
        "relocate" ->
156
            do
157
              rname     <- extrReq "name"
158
              ridx      <- lookupInstance kti rname
159
              req_nodes <- extrReq "required_nodes"
160
              ex_nodes  <- extrReq "relocate_from"
161
              ex_idex   <- mapM (Container.findByName map_n) ex_nodes
162
              return $ Relocate ridx req_nodes (map Node.idx ex_idex)
163
        "multi-evacuate" ->
164
            do
165
              ex_names <- extrReq "evac_nodes"
166
              ex_nodes <- mapM (Container.findByName map_n) ex_names
167
              let ex_ndx = map Node.idx ex_nodes
168
              return $ Evacuate ex_ndx
169
        other -> fail ("Invalid request type '" ++ other ++ "'")
148
      case () of
149
        _ | optype == C.iallocatorModeAlloc ->
150
              do
151
                rname     <- extrReq "name"
152
                req_nodes <- extrReq "required_nodes"
153
                inew      <- parseBaseInstance rname request
154
                let io = snd inew
155
                return $ Allocate io req_nodes
156
          | optype == C.iallocatorModeReloc ->
157
              do
158
                rname     <- extrReq "name"
159
                ridx      <- lookupInstance kti rname
160
                req_nodes <- extrReq "required_nodes"
161
                ex_nodes  <- extrReq "relocate_from"
162
                ex_idex   <- mapM (Container.findByName map_n) ex_nodes
163
                return $ Relocate ridx req_nodes (map Node.idx ex_idex)
164
          | optype == C.iallocatorModeMevac ->
165
              do
166
                ex_names <- extrReq "evac_nodes"
167
                ex_nodes <- mapM (Container.findByName map_n) ex_names
168
                let ex_ndx = map Node.idx ex_nodes
169
                return $ Evacuate ex_ndx
170
          | otherwise -> fail ("Invalid request type '" ++ optype ++ "'")
170 171
  return $ Request rqtype cdata
171 172

  
172 173
-- | Format the result

Also available in: Unified diff