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