Revision f89235f1

b/Ganeti/HTools/Luxi.hs
38 38
import Ganeti.HTools.Types
39 39
import qualified Ganeti.HTools.Node as Node
40 40
import qualified Ganeti.HTools.Instance as Instance
41
import Ganeti.HTools.Utils (fromJVal, annotateResult)
41
import Ganeti.HTools.Utils (fromJVal, annotateResult, tryFromObj, asJSObject)
42 42

  
43 43
-- * Utility functions
44 44

  
......
75 75
        use_locking = JSBool False
76 76
    in JSArray [nnames, fields, use_locking]
77 77

  
78
-- | The input data for cluster query
79
queryClusterInfoMsg :: JSValue
80
queryClusterInfoMsg = JSArray []
81

  
78 82
-- | Wraper over callMethod doing node query.
79 83
queryNodes :: L.Client -> IO (Result JSValue)
80 84
queryNodes = L.callMethod L.QueryNodes queryNodesMsg
......
83 87
queryInstances :: L.Client -> IO (Result JSValue)
84 88
queryInstances = L.callMethod L.QueryInstances queryInstancesMsg
85 89

  
90
queryClusterInfo :: L.Client -> IO (Result JSValue)
91
queryClusterInfo = L.callMethod L.QueryClusterInfo queryClusterInfoMsg
92

  
86 93
-- | Parse a instance list in JSON format.
87 94
getInstances :: NameAssoc
88 95
             -> JSValue
......
140 147

  
141 148
parseNode v = fail ("Invalid node query result: " ++ show v)
142 149

  
150
getClusterTags :: JSValue -> Result [String]
151
getClusterTags v = do
152
  let errmsg = "Parsing cluster info"
153
  obj <- annotateResult errmsg $ asJSObject v
154
  tags <- tryFromObj errmsg (fromJSObject obj) "tag"
155
  return tags
156

  
143 157
-- * Main loader functionality
144 158

  
145 159
-- | Builds the cluster data from an URL.
......
152 166
       (\s -> do
153 167
          nodes <- queryNodes s
154 168
          instances <- queryInstances s
169
          cinfo <- queryClusterInfo s
155 170
          return $ do -- Result monad
156 171
            node_data <- nodes >>= getNodes
157 172
            let (node_names, node_idx) = assignIndices node_data
158 173
            inst_data <- instances >>= getInstances node_names
159 174
            let (_, inst_idx) = assignIndices inst_data
160
            return (node_idx, inst_idx, [])
175
            ctags <- cinfo >>= getClusterTags
176
            return (node_idx, inst_idx, ctags)
161 177
       )
b/Ganeti/Luxi.hs
63 63
data LuxiOp = QueryInstances
64 64
            | QueryNodes
65 65
            | QueryJobs
66
            | QueryClusterInfo
66 67
            | SubmitManyJobs
67 68

  
68 69
-- | The serialisation of LuxiOps into strings in messages.
......
70 71
strOfOp QueryNodes = "QueryNodes"
71 72
strOfOp QueryInstances = "QueryInstances"
72 73
strOfOp QueryJobs = "QueryJobs"
74
strOfOp QueryClusterInfo = "QueryClusterInfo"
73 75
strOfOp SubmitManyJobs = "SubmitManyJobs"
74 76

  
75 77
-- | The end-of-message separator.

Also available in: Unified diff