root / htools / htools.hs @ 8353b5e1
History | View | Annotate | Download (2 kB)
1 | d26d808a | Iustin Pop | {-| Main htools binary. |
---|---|---|---|
2 | d26d808a | Iustin Pop | |
3 | d26d808a | Iustin Pop | -} |
4 | d26d808a | Iustin Pop | |
5 | d26d808a | Iustin Pop | {- |
6 | d26d808a | Iustin Pop | |
7 | d26d808a | Iustin Pop | Copyright (C) 2011 Google Inc. |
8 | d26d808a | Iustin Pop | |
9 | d26d808a | Iustin Pop | This program is free software; you can redistribute it and/or modify |
10 | d26d808a | Iustin Pop | it under the terms of the GNU General Public License as published by |
11 | d26d808a | Iustin Pop | the Free Software Foundation; either version 2 of the License, or |
12 | d26d808a | Iustin Pop | (at your option) any later version. |
13 | d26d808a | Iustin Pop | |
14 | d26d808a | Iustin Pop | This program is distributed in the hope that it will be useful, but |
15 | d26d808a | Iustin Pop | WITHOUT ANY WARRANTY; without even the implied warranty of |
16 | d26d808a | Iustin Pop | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
17 | d26d808a | Iustin Pop | General Public License for more details. |
18 | d26d808a | Iustin Pop | |
19 | d26d808a | Iustin Pop | You should have received a copy of the GNU General Public License |
20 | d26d808a | Iustin Pop | along with this program; if not, write to the Free Software |
21 | d26d808a | Iustin Pop | Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA |
22 | d26d808a | Iustin Pop | 02110-1301, USA. |
23 | d26d808a | Iustin Pop | |
24 | d26d808a | Iustin Pop | -} |
25 | d26d808a | Iustin Pop | |
26 | d26d808a | Iustin Pop | module Main (main) where |
27 | d26d808a | Iustin Pop | |
28 | d26d808a | Iustin Pop | import Data.Char (toLower) |
29 | d26d808a | Iustin Pop | import System |
30 | d26d808a | Iustin Pop | import System.IO |
31 | d26d808a | Iustin Pop | |
32 | d26d808a | Iustin Pop | import Ganeti.HTools.Utils |
33 | 458a286a | Iustin Pop | import qualified Ganeti.HTools.Program.Hail as Hail |
34 | 201b6c34 | Iustin Pop | import qualified Ganeti.HTools.Program.Hbal as Hbal |
35 | 7b695a0d | Iustin Pop | import qualified Ganeti.HTools.Program.Hscan as Hscan |
36 | 1494a4cc | Iustin Pop | import qualified Ganeti.HTools.Program.Hspace as Hspace |
37 | d26d808a | Iustin Pop | |
38 | d26d808a | Iustin Pop | -- | Supported binaries. |
39 | d26d808a | Iustin Pop | personalities :: [(String, IO ())] |
40 | 458a286a | Iustin Pop | personalities = [ ("hail", Hail.main) |
41 | 201b6c34 | Iustin Pop | , ("hbal", Hbal.main) |
42 | 7b695a0d | Iustin Pop | , ("hscan", Hscan.main) |
43 | 1494a4cc | Iustin Pop | , ("hspace", Hspace.main) |
44 | 458a286a | Iustin Pop | ] |
45 | d26d808a | Iustin Pop | |
46 | d26d808a | Iustin Pop | -- | Display usage and exit. |
47 | d26d808a | Iustin Pop | usage :: String -> IO () |
48 | d26d808a | Iustin Pop | usage name = do |
49 | d26d808a | Iustin Pop | hPutStrLn stderr $ "Unrecognised personality '" ++ name ++ "'." |
50 | d26d808a | Iustin Pop | hPutStrLn stderr "This program must be installed under one of the following\ |
51 | d26d808a | Iustin Pop | \ names:" |
52 | d26d808a | Iustin Pop | mapM_ (hPutStrLn stderr . (" - " ++) . fst) personalities |
53 | d26d808a | Iustin Pop | hPutStrLn stderr "Please either rename/symlink the program or set\n\ |
54 | d26d808a | Iustin Pop | \the environment variable HTOOLS to the desired role." |
55 | d26d808a | Iustin Pop | exitWith $ ExitFailure 1 |
56 | d26d808a | Iustin Pop | |
57 | d26d808a | Iustin Pop | main :: IO () |
58 | d26d808a | Iustin Pop | main = do |
59 | d26d808a | Iustin Pop | binary <- getEnv "HTOOLS" `catch` (\_ -> getProgName) |
60 | d26d808a | Iustin Pop | let name = map toLower binary |
61 | d26d808a | Iustin Pop | boolnames = map (\(x, y) -> (x == name, y)) personalities |
62 | d26d808a | Iustin Pop | select (usage name) boolnames |