This allows non-vm_capable nodes, which don't export runtime data, to
not break the IAllocator message parsing.
---
Ganeti/HTools/IAlloc.hs | 7 +++++--
1 files changed, 5 insertions(+), 2 deletions(-)
diff --git a/Ganeti/HTools/IAlloc.hs b/Ganeti/HTools/IAlloc.hs
index 548e427..f4c9044 100644
--- a/Ganeti/HTools/IAlloc.hs
+++ b/Ganeti/HTools/IAlloc.hs
@@ -29,6 +29,7 @@ module Ganeti.HTools.IAlloc
) where
import Data.Either ()
+import Data.Maybe (fromMaybe)
import Control.Monad
import Text.JSON (JSObject, JSValue(JSBool, JSString, JSArray),
makeObj, encodeStrict, decodeStrict,
@@ -81,12 +82,14 @@ parseNode :: NameAssoc -- ^ The group association
-> [(String, JSValue)] -- ^ The JSON object
-> Result (String, Node.Node)
parseNode ktg n a = do
- let extract x = tryFromObj ("invalid data for node '" ++ n ++ "'") a x
+ let desc = "invalid data for node '" ++ n ++ "'"
+ extract x = tryFromObj desc a x
offline <- extract "offline"
drained <- extract "drained"
guuid <- extract "group"
+ vm_cap <- annotateResult desc $ maybeFromObj a "vm_capable"
gidx <- lookupGroup ktg n guuid
- node <- (if offline || drained
+ node <- (if offline || drained || not (fromMaybe True vm_cap)
then return $ Node.create n 0 0 0 0 0 0 True gidx
else do
mtotal <- extract "total_memory"
--
1.7.3.1