MarkInstanceDisksActive is used by instance migration.

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

diff --git a/src/Ganeti/WConfd/ConfigModifications.hs 
b/src/Ganeti/WConfd/ConfigModifications.hs
index 7daf2f2..0e72030 100644
--- a/src/Ganeti/WConfd/ConfigModifications.hs
+++ b/src/Ganeti/WConfd/ConfigModifications.hs
@@ -395,6 +395,23 @@ allocatePort = do
     (return ())
   return . MaybeForJSON $ maybePort
 
+-- | Mark the status of instance disks active.
+markInstanceDisksActive :: InstanceUUID -> WConfdMonad (MaybeForJSON Instance)
+markInstanceDisksActive iUuid = do
+  ct <- liftIO getClockTime
+  fmap MaybeForJSON $ modifyConfigAndReturnWithLock (\_ cs -> do
+    inst <- toError $ getInstanceByUUID cs iUuid
+    if instDisksActive inst == Just True
+      then return (inst, cs)
+      else do
+        let inst' = (instDisksActiveL .~ Just True) $ inst
+            iL = csConfigDataL . configInstancesL
+        iC <- toError $ replaceIn ct inst' (cs ^. iL)
+        let cs' = (iL .~ iC) $ cs
+        inst'' <- toError $ getInstanceByUUID cs' iUuid
+        return (inst'', cs'))
+    (return ())
+
 -- | The configuration is updated by the provided cluster
 updateCluster :: Cluster -> WConfdMonad (MaybeForJSON TimeAsDoubleJSON)
 updateCluster cluster = do
@@ -480,6 +497,7 @@ exportedFunctions = [ 'addInstance
                     , 'addInstanceDisk
                     , 'allocatePort
                     , 'attachInstanceDisk
+                    , 'markInstanceDisksActive
                     , 'updateCluster
                     , 'updateDisk
                     , 'updateInstance
-- 
1.7.10.4

Reply via email to