root / htools / htools.hs @ f87c9f5d
History | View | Annotate | Download (1.8 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 | 21839f47 | Iustin Pop | Copyright (C) 2011, 2012 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 | 7345b69b | Iustin Pop | import System.Environment |
30 | 7345b69b | Iustin Pop | import System.Exit |
31 | d26d808a | Iustin Pop | import System.IO |
32 | d26d808a | Iustin Pop | |
33 | d26d808a | Iustin Pop | import Ganeti.HTools.Utils |
34 | 9f13be88 | Iustin Pop | import Ganeti.HTools.CLI (parseOpts) |
35 | 9f13be88 | Iustin Pop | import Ganeti.HTools.Program (personalities) |
36 | d26d808a | Iustin Pop | |
37 | d26d808a | Iustin Pop | -- | Display usage and exit. |
38 | d26d808a | Iustin Pop | usage :: String -> IO () |
39 | d26d808a | Iustin Pop | usage name = do |
40 | d26d808a | Iustin Pop | hPutStrLn stderr $ "Unrecognised personality '" ++ name ++ "'." |
41 | d26d808a | Iustin Pop | hPutStrLn stderr "This program must be installed under one of the following\ |
42 | d26d808a | Iustin Pop | \ names:" |
43 | d26d808a | Iustin Pop | mapM_ (hPutStrLn stderr . (" - " ++) . fst) personalities |
44 | d26d808a | Iustin Pop | hPutStrLn stderr "Please either rename/symlink the program or set\n\ |
45 | d26d808a | Iustin Pop | \the environment variable HTOOLS to the desired role." |
46 | d26d808a | Iustin Pop | exitWith $ ExitFailure 1 |
47 | d26d808a | Iustin Pop | |
48 | d26d808a | Iustin Pop | main :: IO () |
49 | d26d808a | Iustin Pop | main = do |
50 | 05ff7a00 | Agata Murawska | binary <- getEnv "HTOOLS" `catch` const getProgName |
51 | d26d808a | Iustin Pop | let name = map toLower binary |
52 | 21839f47 | Iustin Pop | boolnames = map (\(x, y) -> (x == name, Just y)) personalities |
53 | 21839f47 | Iustin Pop | case select Nothing boolnames of |
54 | 21839f47 | Iustin Pop | Nothing -> usage name |
55 | 21839f47 | Iustin Pop | Just (fn, options) -> do |
56 | 21839f47 | Iustin Pop | cmd_args <- getArgs |
57 | 21839f47 | Iustin Pop | (opts, args) <- parseOpts cmd_args name options |
58 | 21839f47 | Iustin Pop | fn opts args |