diff --git a/Ganeti/HTools/IAlloc.hs b/Ganeti/HTools/IAlloc.hs index 88b4a5c88488e92f2a23c05ecb316423b1b049c5..679ce161b101d22138771429f9e5b5a808e79140 100644 --- a/Ganeti/HTools/IAlloc.hs +++ b/Ganeti/HTools/IAlloc.hs @@ -81,7 +81,7 @@ parseNode n a = do offline <- fromObj "offline" a drained <- fromObj "drained" a node <- (if offline || drained - then return $ Node.create n 0 0 0 0 0 0 True + then return $ Node.create n 0 0 0 0 0 0 True defaultUUID else do mtotal <- fromObj "total_memory" a mnode <- fromObj "reserved_memory" a @@ -90,7 +90,7 @@ parseNode n a = do dfree <- fromObj "free_disk" a ctotal <- fromObj "total_cpus" a return $ Node.create n mtotal mnode mfree - dtotal dfree ctotal False) + dtotal dfree ctotal False defaultUUID) return (n, node) -- | Top-level parser. diff --git a/Ganeti/HTools/Luxi.hs b/Ganeti/HTools/Luxi.hs index 7153481c924620bb1a8473ea4e127134569441d1..9cf66a1fa474a63e0160e062fff63f2145697c2a 100644 --- a/Ganeti/HTools/Luxi.hs +++ b/Ganeti/HTools/Luxi.hs @@ -37,7 +37,8 @@ import Ganeti.HTools.Loader import Ganeti.HTools.Types import qualified Ganeti.HTools.Node as Node import qualified Ganeti.HTools.Instance as Instance -import Ganeti.HTools.Utils (fromJVal, annotateResult, tryFromObj, asJSObject) +import Ganeti.HTools.Utils (fromJVal, annotateResult, tryFromObj, asJSObject, + defaultUUID) -- * Utility functions @@ -123,7 +124,7 @@ parseNode (JSArray [ name, mtotal, mnode, mfree, dtotal, dfree xdrained <- convert drained xvm_capable <- convert vm_capable node <- (if xoffline || xdrained || not xvm_capable - then return $ Node.create xname 0 0 0 0 0 0 True + then return $ Node.create xname 0 0 0 0 0 0 True defaultUUID else do xmtotal <- convert mtotal xmnode <- convert mnode @@ -132,7 +133,7 @@ parseNode (JSArray [ name, mtotal, mnode, mfree, dtotal, dfree xdfree <- convert dfree xctotal <- convert ctotal return $ Node.create xname xmtotal xmnode xmfree - xdtotal xdfree xctotal False) + xdtotal xdfree xctotal False defaultUUID) return (xname, node) parseNode v = fail ("Invalid node query result: " ++ show v) diff --git a/Ganeti/HTools/Node.hs b/Ganeti/HTools/Node.hs index 37deec55eee8476b78045343788766fe130303c1..be2a3dc8bf645519d621f8a042006e8b0f77f826 100644 --- a/Ganeti/HTools/Node.hs +++ b/Ganeti/HTools/Node.hs @@ -68,7 +68,7 @@ module Ganeti.HTools.Node , noSecondary ) where -import Data.List +import Data.List hiding (group) import qualified Data.Map as Map import qualified Data.Foldable as Foldable import Text.Printf (printf) @@ -119,6 +119,7 @@ data Node = Node , utilPool :: T.DynUtil -- ^ Total utilisation capacity , utilLoad :: T.DynUtil -- ^ Sum of instance utilisation , pTags :: TagMap -- ^ Map of primary instance tags and their count + , group :: String -- ^ The node's group (as UUID) } deriving (Show, Eq) instance T.Element Node where @@ -182,9 +183,9 @@ conflictingPrimaries (Node { pTags = t }) = Foldable.sum t - Map.size t -- The index and the peers maps are empty, and will be need to be -- update later via the 'setIdx' and 'buildPeers' functions. create :: String -> Double -> Int -> Int -> Double - -> Int -> Double -> Bool -> Node + -> Int -> Double -> Bool -> String -> Node create name_init mem_t_init mem_n_init mem_f_init - dsk_t_init dsk_f_init cpu_t_init offline_init = + dsk_t_init dsk_f_init cpu_t_init offline_init group_init = Node { name = name_init , alias = name_init , tMem = mem_t_init @@ -213,6 +214,7 @@ create name_init mem_t_init mem_n_init mem_f_init , utilPool = T.baseUtil , utilLoad = T.zeroUtil , pTags = Map.empty + , group = group_init } -- | Conversion formula from mDsk\/tDsk to loDsk @@ -483,6 +485,7 @@ showField t field = "ptags" -> intercalate "," . map (\(k, v) -> printf "%s=%d" k v) . Map.toList $ pTags t "peermap" -> show $ peers t + "group.uuid" -> group t _ -> T.unknownField where T.DynUtil { T.cpuWeight = uC, T.memWeight = uM, @@ -521,6 +524,7 @@ showHeader field = "nload" -> ("lNet", True) "ptags" -> ("PrimaryTags", False) "peermap" -> ("PeerMap", False) + "group.uuid" -> ("GroupUUID", False) _ -> (T.unknownField, False) -- | String converter for the node list functionality. diff --git a/Ganeti/HTools/QC.hs b/Ganeti/HTools/QC.hs index b7a030f1461cc01743e9d0f886b40c3f336aa2ca..5e7120ea09b504f020869f1424f7d6f8dcbbebcb 100644 --- a/Ganeti/HTools/QC.hs +++ b/Ganeti/HTools/QC.hs @@ -176,6 +176,7 @@ instance Arbitrary Node.Node where offl <- arbitrary let n = Node.create name (fromIntegral mem_t) mem_n mem_f (fromIntegral dsk_t) dsk_f (fromIntegral cpu_t) offl + Utils.defaultUUID n' = Node.buildPeers n Container.empty return n' diff --git a/Ganeti/HTools/Rapi.hs b/Ganeti/HTools/Rapi.hs index d0619204e0713451d3fee16597cfd374355018ad..3f4a754ea6fce3389284e3d005b7308621a3c31a 100644 --- a/Ganeti/HTools/Rapi.hs +++ b/Ganeti/HTools/Rapi.hs @@ -106,7 +106,7 @@ parseNode a = do offline <- extract "offline" drained <- extract "drained" node <- (if offline || drained - then return $ Node.create name 0 0 0 0 0 0 True + then return $ Node.create name 0 0 0 0 0 0 True defaultUUID else do mtotal <- extract "mtotal" mnode <- extract "mnode" @@ -115,7 +115,7 @@ parseNode a = do dfree <- extract "dfree" ctotal <- extract "ctotal" return $ Node.create name mtotal mnode mfree - dtotal dfree ctotal False) + dtotal dfree ctotal False defaultUUID) return (name, node) -- | Loads the raw cluster data from an URL. diff --git a/Ganeti/HTools/Simu.hs b/Ganeti/HTools/Simu.hs index 6c01726ecc99a2045da26878836cee77af4b6072..d41f4a39bee7c38db4f4e5fdf2ad3e68a3ed8ac3 100644 --- a/Ganeti/HTools/Simu.hs +++ b/Ganeti/HTools/Simu.hs @@ -59,7 +59,7 @@ parseData ndata = do let n = Node.create (printf "node%03d" idx) (fromIntegral mem) 0 mem (fromIntegral disk) disk - (fromIntegral cpu) False + (fromIntegral cpu) False defaultUUID in (idx, Node.setIdx n idx) ) [1..cnt] return (nodes, [], []) diff --git a/Ganeti/HTools/Text.hs b/Ganeti/HTools/Text.hs index c9aac174a8ef115efb201c8931dfcc8dd58675d5..5b8d955989956a0e1809c814eb82f5829c9fb5e4 100644 --- a/Ganeti/HTools/Text.hs +++ b/Ganeti/HTools/Text.hs @@ -95,7 +95,7 @@ loadNode :: (Monad m) => [String] -> m (String, Node.Node) loadNode [name, tm, nm, fm, td, fd, tc, fo] = do new_node <- if any (== "?") [tm,nm,fm,td,fd,tc] || fo == "Y" then - return $ Node.create name 0 0 0 0 0 0 True + return $ Node.create name 0 0 0 0 0 0 True defaultUUID else do vtm <- tryRead name tm vnm <- tryRead name nm @@ -103,7 +103,7 @@ loadNode [name, tm, nm, fm, td, fd, tc, fo] = do vtd <- tryRead name td vfd <- tryRead name fd vtc <- tryRead name tc - return $ Node.create name vtm vnm vfm vtd vfd vtc False + return $ Node.create name vtm vnm vfm vtd vfd vtc False defaultUUID return (name, new_node) loadNode s = fail $ "Invalid/incomplete node data: '" ++ show s ++ "'"