Change the module import hierarchy
[ganeti-local] / hn1.hs
diff --git a/hn1.hs b/hn1.hs
index 3643e8d..e51f428 100644 (file)
--- a/hn1.hs
+++ b/hn1.hs
@@ -16,12 +16,9 @@ import Text.Printf (printf)
 
 import qualified Ganeti.HTools.Container as Container
 import qualified Ganeti.HTools.Instance as Instance
+import qualified Ganeti.HTools.Node as Node
 import qualified Ganeti.HTools.Cluster as Cluster
 import qualified Ganeti.HTools.CLI as CLI
-import qualified Ganeti.HTools.Rapi as Rapi
-import qualified Ganeti.HTools.Text as Text
-import qualified Ganeti.HTools.Loader as Loader
-import Ganeti.HTools.Types
 
 -- | Command line options structure.
 data Options = Options
@@ -40,6 +37,18 @@ data Options = Options
     , optShowHelp    :: Bool     -- ^ Just show the help
     } deriving Show
 
+instance CLI.CLIOptions Options where
+    showVersion = optShowVer
+    showHelp    = optShowHelp
+
+instance CLI.EToolOptions Options where
+    nodeFile   = optNodef
+    nodeSet    = optNodeSet
+    instFile   = optInstf
+    instSet    = optInstSet
+    masterName = optMaster
+    silent _   = False
+
 -- | Default values for the command line options.
 defaultOptions :: Options
 defaultOptions    = Options
@@ -62,7 +71,7 @@ defaultOptions    = Options
 we find a valid solution or we exceed the maximum depth.
 
 -}
-iterateDepth :: NodeList
+iterateDepth :: Node.List
              -> [Instance.Instance]
              -> Int
              -> Int
@@ -130,41 +139,13 @@ main :: IO ()
 main = do
   cmd_args <- System.getArgs
   (opts, args) <- CLI.parseOpts cmd_args "hn1" options
-                  defaultOptions optShowHelp
+                  defaultOptions
 
   unless (null args) $ do
          hPutStrLn stderr "Error: this program doesn't take any arguments."
          exitWith $ ExitFailure 1
 
-  when (optShowVer opts) $ do
-         putStr $ CLI.showVersion "hn1"
-         exitWith ExitSuccess
-
-  (env_node, env_inst) <- CLI.parseEnv ()
-  let nodef = if optNodeSet opts then optNodef opts
-              else env_node
-      instf = if optInstSet opts then optInstf opts
-              else env_inst
-      min_depth = optMinDepth opts
-
-  input_data <-
-      case optMaster opts of
-        "" -> Text.loadData nodef instf
-        host -> Rapi.loadData host
-  let ldresult = input_data >>= Loader.mergeData
-
-  (loaded_nl, il, csf, ktn, kti) <-
-      (case ldresult of
-         Ok x -> return x
-         Bad s -> do
-           printf "Error: failed to load data. Details:\n%s\n" s
-           exitWith $ ExitFailure 1
-      )
-  let (fix_msgs, nl) = Cluster.checkData loaded_nl il ktn kti
-
-  unless (null fix_msgs) $ do
-         putStrLn "Warning: cluster has inconsistent data:"
-         putStrLn . unlines . map (\s -> printf "  - %s" s) $ fix_msgs
+  (nl, il, csf) <- CLI.loadExternalData opts
 
   printf "Loaded %d nodes, %d instances\n"
              (Container.size nl)
@@ -174,6 +155,8 @@ main = do
          printf "Note: Stripping common suffix of '%s' from names\n" csf
 
   let (bad_nodes, bad_instances) = Cluster.computeBadItems nl il
+      min_depth = optMinDepth opts
+
   printf "Initial check done: %d bad nodes, %d bad instances.\n"
              (length bad_nodes) (length bad_instances)
 
@@ -214,7 +197,7 @@ main = do
          (Cluster.printStats ns)
 
   printf "Solution (delta=%d):\n" $! min_d
-  let (sol_strs, cmd_strs) = Cluster.printSolution il ktn kti solution
+  let (sol_strs, cmd_strs) = Cluster.printSolution ns il solution
   putStr $ unlines $ sol_strs
   when (optShowCmds opts) $
        do
@@ -228,6 +211,6 @@ main = do
              (final_mem, final_disk) = Cluster.totalResources ns
          putStrLn ""
          putStrLn "Final cluster status:"
-         putStrLn $ Cluster.printNodes ktn ns
+         putStrLn $ Cluster.printNodes ns
          printf "Original: mem=%d disk=%d\n" orig_mem orig_disk
          printf "Final:    mem=%d disk=%d\n" final_mem final_disk