Add two new node attributes
[ganeti-local] / hn1.hs
diff --git a/hn1.hs b/hn1.hs
index 9268338..d8bcf44 100644 (file)
--- a/hn1.hs
+++ b/hn1.hs
@@ -2,6 +2,27 @@
 
 -}
 
+{-
+
+Copyright (C) 2009 Google Inc.
+
+This program is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful, but
+WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program; if not, write to the Free Software
+Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301, USA.
+
+-}
+
 module Main (main) where
 
 import Data.List
@@ -16,12 +37,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
@@ -44,6 +62,14 @@ 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
@@ -66,7 +92,7 @@ defaultOptions    = Options
 we find a valid solution or we exceed the maximum depth.
 
 -}
-iterateDepth :: NodeList
+iterateDepth :: Node.List
              -> [Instance.Instance]
              -> Int
              -> Int
@@ -140,31 +166,7 @@ main = do
          hPutStrLn stderr "Error: this program doesn't take any arguments."
          exitWith $ ExitFailure 1
 
-  (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) = Loader.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 +176,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 +218,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 +232,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