Retrives all IDs from ConfigState

Signed-off-by: BSRK Aditya <[email protected]>
---
 src/Ganeti/WConfd/ConfigModifications.hs |   28 ++++++++++++++++++++++++++++
 1 file changed, 28 insertions(+)

diff --git a/src/Ganeti/WConfd/ConfigModifications.hs 
b/src/Ganeti/WConfd/ConfigModifications.hs
index 0c07ba1..44654cd 100644
--- a/src/Ganeti/WConfd/ConfigModifications.hs
+++ b/src/Ganeti/WConfd/ConfigModifications.hs
@@ -110,6 +110,34 @@ getAllLVs cs = fmap (nub . concat . concatMap 
elemsFromContainer)
         instUuids :: [InstanceUUID]
         instUuids = map instUuid . elemsFromContainer 
                   . configInstances . csConfigData $ cs
+
+getAllIDs :: ConfigState -> GenericResult GanetiException [String]
+getAllIDs cs = do
+  lvs <- getAllLVs cs
+  let keysFromC :: GenericContainer a b -> [a]
+      keysFromC = M.keys . fromContainer
+
+      valuesFromC :: GenericContainer a b -> [b]
+      valuesFromC = M.elems . fromContainer
+
+      instKeys = keysFromC . configInstances . csConfigData $ cs
+      nodeKeys = keysFromC . configNodes . csConfigData $ cs
+      
+      instValues = map uuidOf . valuesFromC
+                 . configInstances . csConfigData $ cs
+      nodeValues = map uuidOf . valuesFromC . configNodes . csConfigData $ cs
+      nodeGroupValues = map uuidOf . valuesFromC
+                      . configNodegroups . csConfigData $ cs
+      networkValues = map uuidOf . valuesFromC
+                    . configNetworks . csConfigData $ cs
+      disksValues = map uuidOf . valuesFromC . configDisks . csConfigData $ cs
+
+      nics = map nicUuid . concatMap instNics
+           . valuesFromC . configInstances . csConfigData $ cs
+
+      cluster = uuidOf . configCluster . csConfigData $ cs
+  return . nub $ lvs ++ instKeys ++ nodeKeys ++ instValues ++ nodeValues
+         ++ nodeGroupValues ++ networkValues ++ disksValues ++ nics ++ 
[cluster]
 -- | Add a new instance to the configuration, release DRBD minors,
 -- and commit temporary IPs, all while temporarily holding the config
 -- lock. Return True upon success and False if the config lock was not
-- 
1.7.10.4

Reply via email to