MarkInstanceDisksActive is used by instance migration.

Disabled pylint R0904 on class Client in lib/wconfd.py
due to excess number of public methods.

Signed-off-by: BSRK Aditya <[email protected]>
---
 lib/wconfd.py                            |    2 ++
 src/Ganeti/WConfd/ConfigModifications.hs |   18 ++++++++++++++++++
 2 files changed, 20 insertions(+)

diff --git a/lib/wconfd.py b/lib/wconfd.py
index d834e68..9d42b44 100644
--- a/lib/wconfd.py
+++ b/lib/wconfd.py
@@ -43,6 +43,8 @@ from ganeti.rpc import errors
 
 
 class Client(cl.AbstractStubClient, stub.ClientRpcStub):
+  # R0904: Too many public methods
+  # pylint: disable=R0904
   """High-level WConfD client implementation.
 
   This uses a backing Transport-like class on top of which it
diff --git a/src/Ganeti/WConfd/ConfigModifications.hs 
b/src/Ganeti/WConfd/ConfigModifications.hs
index 81505bc..e18d230 100644
--- a/src/Ganeti/WConfd/ConfigModifications.hs
+++ b/src/Ganeti/WConfd/ConfigModifications.hs
@@ -39,6 +39,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 
 module Ganeti.WConfd.ConfigModifications where
 
+import Control.Applicative ((<$>))
 import Control.Lens (_2)
 import Control.Lens.Getter ((^.))
 import Control.Lens.Setter ((.~), (%~))
@@ -396,6 +397,22 @@ allocatePort = do
     (return ())
   return . MaybeForJSON $ maybePort
 
+-- | Mark the status of instance disks active.
+markInstanceDisksActive :: InstanceUUID -> WConfdMonad (MaybeForJSON Instance)
+markInstanceDisksActive iUuid = do
+  ct <- liftIO getClockTime
+  MaybeForJSON <$> modifyConfigAndReturnWithLock (\_ cs -> do
+    inst <- toError $ getInstanceByUUID cs iUuid
+    if instDisksActive inst == Just True
+      then return (inst, cs)
+      else do
+        let inst' = (instDisksActiveL .~ True) inst
+            iL = csConfigDataL . configInstancesL
+        cs' <- fmap (flip (iL .~) cs) . toError $ replaceIn ct inst' (cs ^. iL)
+        inst'' <- toError $ getInstanceByUUID cs' iUuid
+        return (inst'', cs'))
+    (return ())
+
 -- | The configuration is updated by the provided cluster
 updateCluster :: Cluster -> WConfdMonad (MaybeForJSON (Int, TimeAsDoubleJSON))
 updateCluster cluster = do
@@ -483,6 +500,7 @@ exportedFunctions = [ 'addInstance
                     , 'addInstanceDisk
                     , 'allocatePort
                     , 'attachInstanceDisk
+                    , 'markInstanceDisksActive
                     , 'updateCluster
                     , 'updateDisk
                     , 'updateInstance
-- 
1.7.10.4

Reply via email to