Revision c3f8cb12 htools/Ganeti/HTools/IAlloc.hs
b/htools/Ganeti/HTools/IAlloc.hs | ||
---|---|---|
30 | 30 |
) where |
31 | 31 |
|
32 | 32 |
import Data.Either () |
33 |
import Data.Maybe (fromMaybe, isJust)
|
|
33 |
import Data.Maybe (fromMaybe) |
|
34 | 34 |
import Data.List |
35 | 35 |
import Control.Monad |
36 | 36 |
import Text.JSON (JSObject, JSValue(JSArray), |
... | ... | |
46 | 46 |
import qualified Ganeti.Constants as C |
47 | 47 |
import Ganeti.HTools.CLI |
48 | 48 |
import Ganeti.HTools.Loader |
49 |
import Ganeti.HTools.ExtLoader (loadExternalData) |
|
50 | 49 |
import Ganeti.HTools.JSON |
51 | 50 |
import Ganeti.HTools.Types |
52 | 51 |
|
... | ... | |
325 | 324 |
formatNodeEvac gl nl il |
326 | 325 |
|
327 | 326 |
-- | Reads the request from the data file(s). |
328 |
readRequest :: Options -> [String] -> IO Request |
|
329 |
readRequest opts args = do |
|
330 |
when (null args) $ do |
|
331 |
hPutStrLn stderr "Error: this program needs an input file." |
|
332 |
exitWith $ ExitFailure 1 |
|
333 |
|
|
334 |
input_data <- readFile (head args) |
|
335 |
r1 <- case parseData input_data of |
|
336 |
Bad err -> do |
|
337 |
hPutStrLn stderr $ "Error: " ++ err |
|
338 |
exitWith $ ExitFailure 1 |
|
339 |
Ok (fix_msgs, rq) -> maybeShowWarnings fix_msgs >> return rq |
|
340 |
if isJust (optDataFile opts) || (not . null . optNodeSim) opts |
|
341 |
then do |
|
342 |
cdata <- loadExternalData opts |
|
343 |
let Request rqt _ = r1 |
|
344 |
return $ Request rqt cdata |
|
345 |
else return r1 |
|
327 |
readRequest :: FilePath -> IO Request |
|
328 |
readRequest fp = do |
|
329 |
input_data <- readFile fp |
|
330 |
case parseData input_data of |
|
331 |
Bad err -> do |
|
332 |
hPutStrLn stderr $ "Error: " ++ err |
|
333 |
exitWith $ ExitFailure 1 |
|
334 |
Ok (fix_msgs, rq) -> maybeShowWarnings fix_msgs >> return rq |
|
346 | 335 |
|
347 | 336 |
-- | Main iallocator pipeline. |
348 | 337 |
runIAllocator :: Request -> (Maybe (Node.List, Instance.List), String) |
Also available in: Unified diff