+
+-- | External tool data loader from a variety of sources
+loadExternalData :: (EToolOptions a) =>
+ a
+ -> IO (NodeList, InstanceList, String, NameList, NameList)
+loadExternalData opts = do
+ (env_node, env_inst) <- parseEnv ()
+ let nodef = if nodeSet opts then nodeFile opts
+ else env_node
+ instf = if instSet opts then instFile opts
+ else env_inst
+ input_data <-
+ case masterName 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, fixed_nl) = Loader.checkData loaded_nl il ktn kti
+
+ unless (null fix_msgs || silent opts) $ do
+ putStrLn "Warning: cluster has inconsistent data:"
+ putStrLn . unlines . map (\s -> printf " - %s" s) $ fix_msgs
+
+ return (fixed_nl, il, csf, ktn, kti)