Add fields 'inst_cnt' and 'inst_list' to network queries
authorHelga Velroyen <helgav@google.com>
Mon, 28 Jan 2013 16:06:37 +0000 (17:06 +0100)
committerHelga Velroyen <helgav@google.com>
Tue, 29 Jan 2013 13:07:27 +0000 (14:07 +0100)
This adds the fields 'inst_cnt' and 'inst_list' to the
Haskell implementation of the network queries.

Signed-off-by: Helga Velroyen <helgav@google.com>
Reviewed-by: Michele Tartara <mtartara@google.com>

src/Ganeti/Query/Network.hs

index 0101687..6ba0ce4 100644 (file)
@@ -73,6 +73,12 @@ networkFields =
   , (FieldDefinition "group_cnt" "GroupCount" QFTOther "Number of node groups",
      FieldConfig (\cfg -> rsNormal . length . getGroupConnections cfg
        . networkUuid), QffNormal)
+  , (FieldDefinition "inst_list" "InstanceList" QFTOther "List of instances",
+     FieldConfig (\cfg -> rsNormal . getInstances cfg . networkUuid),
+     QffNormal)
+  , (FieldDefinition "inst_cnt" "InstanceCount" QFTOther "Number of instances",
+     FieldConfig (\cfg -> rsNormal . length . getInstances cfg
+       . networkUuid), QffNormal)
   ] ++
   uuidFields "Network" ++
   serialFields "Network" ++
@@ -116,3 +122,13 @@ getNicMode nic_params =
 getNicLink :: PartialNicParams -> String
 getNicLink nic_params = fromMaybe "-" (nicpLinkP nic_params)
 
+-- | Retrieves the network's instances' names.
+getInstances :: ConfigData -> String -> [String]
+getInstances cfg network_uuid =
+  map instName (filter (instIsConnected network_uuid)
+    ((Map.elems . fromContainer . configInstances) cfg))
+
+-- | Helper function that checks if an instance is linked to the given network.
+instIsConnected :: String -> Instance -> Bool
+instIsConnected network_uuid inst =
+  network_uuid `elem` map networkUuid (mapMaybe nicNetwork (instNics inst))