Revision c3f8cb12
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) |
b/htools/Ganeti/HTools/Program/Hail.hs | ||
---|---|---|
26 | 26 |
module Ganeti.HTools.Program.Hail (main, options) where |
27 | 27 |
|
28 | 28 |
import Control.Monad |
29 |
import Data.Maybe (fromMaybe) |
|
29 |
import Data.Maybe (fromMaybe, isJust)
|
|
30 | 30 |
import System.IO |
31 |
import System.Exit |
|
31 | 32 |
|
32 | 33 |
import qualified Ganeti.HTools.Cluster as Cluster |
33 | 34 |
|
34 | 35 |
import Ganeti.HTools.CLI |
35 | 36 |
import Ganeti.HTools.IAlloc |
36 | 37 |
import Ganeti.HTools.Loader (Request(..), ClusterData(..)) |
37 |
import Ganeti.HTools.ExtLoader (maybeSaveData) |
|
38 |
import Ganeti.HTools.ExtLoader (maybeSaveData, loadExternalData)
|
|
38 | 39 |
|
39 | 40 |
-- | Options list and functions. |
40 | 41 |
options :: [OptType] |
... | ... | |
48 | 49 |
, oShowHelp |
49 | 50 |
] |
50 | 51 |
|
52 |
wrapReadRequest :: Options -> [String] -> IO Request |
|
53 |
wrapReadRequest opts args = do |
|
54 |
when (null args) $ do |
|
55 |
hPutStrLn stderr "Error: this program needs an input file." |
|
56 |
exitWith $ ExitFailure 1 |
|
57 |
|
|
58 |
r1 <- readRequest (head args) |
|
59 |
if isJust (optDataFile opts) || (not . null . optNodeSim) opts |
|
60 |
then do |
|
61 |
cdata <- loadExternalData opts |
|
62 |
let Request rqt _ = r1 |
|
63 |
return $ Request rqt cdata |
|
64 |
else return r1 |
|
65 |
|
|
66 |
|
|
51 | 67 |
-- | Main function. |
52 | 68 |
main :: Options -> [String] -> IO () |
53 | 69 |
main opts args = do |
... | ... | |
55 | 71 |
verbose = optVerbose opts |
56 | 72 |
savecluster = optSaveCluster opts |
57 | 73 |
|
58 |
request <- readRequest opts args
|
|
74 |
request <- wrapReadRequest opts args
|
|
59 | 75 |
|
60 | 76 |
let Request rq cdata = request |
61 | 77 |
|
Also available in: Unified diff