This includes nested disk children.

Signed-off-by: Petr Pudlak <[email protected]>
---
 src/Ganeti/Config.hs | 15 +++++++++++++++
 1 file changed, 15 insertions(+)

diff --git a/src/Ganeti/Config.hs b/src/Ganeti/Config.hs
index f6243f7..16c336b 100644
--- a/src/Ganeti/Config.hs
+++ b/src/Ganeti/Config.hs
@@ -52,6 +52,7 @@ module Ganeti.Config
     , getInstAllNodes
     , getInstDisks
     , getInstDisksFromObj
+    , getDrbdMinorsForInstance
     , getFilledInstHvParams
     , getFilledInstBeParams
     , getFilledInstOsParams
@@ -357,6 +358,14 @@ getInstDisksFromObj :: ConfigData -> Instance -> 
ErrorResult [Disk]
 getInstDisksFromObj cfg =
   getInstDisks cfg . instUuid
 
+-- | Returns the DRBD minors of a given 'Disk'
+getDrbdMinorsForDisk :: Disk -> [(Int, String)]
+getDrbdMinorsForDisk Disk{ diskLogicalId = (LIDDrbd8 nA nB _ mnA mnB _)
+                         , diskChildren = ch
+                         } = [(mnA, nA), (mnB, nB)] ++
+                             concatMap getDrbdMinorsForDisk ch
+getDrbdMinorsForDisk d = concatMap getDrbdMinorsForDisk (diskChildren d)
+
 -- | Filters DRBD minors for a given node.
 getDrbdMinorsForNode :: String -> Disk -> [(Int, String)]
 getDrbdMinorsForNode node disk =
@@ -369,6 +378,12 @@ getDrbdMinorsForNode node disk =
           _ -> []
   in this_minors ++ child_minors
 
+-- | Returns the DRBD minors of a given instance
+getDrbdMinorsForInstance :: ConfigData -> Instance
+                         -> ErrorResult [(Int, String)]
+getDrbdMinorsForInstance cfg =
+  liftM (concatMap getDrbdMinorsForDisk) . getInstDisksFromObj cfg
+
 -- | String for primary role.
 rolePrimary :: String
 rolePrimary = "primary"
-- 
1.9.1.423.g4596e3a

Reply via email to