This is yet another fix for type confusion between python
and haskell. ;) The network field of PartialNic should be
a string and not of type Network. This makes it necessary
to add a helper function to look up a network by name
and not by UUID.

Signed-off-by: Helga Velroyen <[email protected]>
---
 src/Ganeti/Objects.hs       |  2 +-
 src/Ganeti/Query/Network.hs | 18 ++++++++++++++----
 2 files changed, 15 insertions(+), 5 deletions(-)

diff --git a/src/Ganeti/Objects.hs b/src/Ganeti/Objects.hs
index 26ccea6..388e5cf 100644
--- a/src/Ganeti/Objects.hs
+++ b/src/Ganeti/Objects.hs
@@ -216,7 +216,7 @@ $(buildObject "PartialNic" "nic"
   [ simpleField "mac" [t| String |]
   , optionalField $ simpleField "ip" [t| String |]
   , simpleField "nicparams" [t| PartialNicParams |]
-  , optionalField $ simpleField "network" [t| Network |]
+  , optionalField $ simpleField "network" [t| String |]
   ])
 
 -- * Disk definitions
diff --git a/src/Ganeti/Query/Network.hs b/src/Ganeti/Query/Network.hs
index 6ba0ce4..a951a24 100644
--- a/src/Ganeti/Query/Network.hs
+++ b/src/Ganeti/Query/Network.hs
@@ -125,10 +125,20 @@ 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 instName (filter (instIsConnected cfg 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))
+instIsConnected :: ConfigData -> String -> Instance -> Bool
+instIsConnected cfg network_uuid inst =
+  network_uuid `elem` mapMaybe (getNetworkUuid cfg)
+    (mapMaybe nicNetwork (instNics inst))
+
+-- | Helper function to look up a network's UUID by its name
+getNetworkUuid :: ConfigData -> String -> Maybe String
+getNetworkUuid cfg name =
+  let nets = filter (\n -> name == fromNonEmpty (networkName n))
+               ((Map.elems . fromContainer . configNetworks) cfg)
+  in case nets of
+    [] -> Nothing
+    net:_ -> Just ((fromNonEmpty . networkName) net)
-- 
1.8.1

Reply via email to