Set's the primary node of an instance.
Used by instance migrate/failover.

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

diff --git a/src/Ganeti/WConfd/ConfigModifications.hs 
b/src/Ganeti/WConfd/ConfigModifications.hs
index e18d230..2bed978 100644
--- a/src/Ganeti/WConfd/ConfigModifications.hs
+++ b/src/Ganeti/WConfd/ConfigModifications.hs
@@ -70,6 +70,7 @@ import qualified Ganeti.WConfd.TempRes as T
 
 type DiskUUID = String
 type InstanceUUID = String
+type NodeUUID = String
 
 -- * accessor functions
 
@@ -413,6 +414,16 @@ markInstanceDisksActive iUuid = do
         return (inst'', cs'))
     (return ())
 
+-- | Sets the primary node of an existing instance
+setInstancePrimaryNode :: InstanceUUID -> NodeUUID -> WConfdMonad Bool
+setInstancePrimaryNode iUuid nUuid = isJust <$> modifyConfigWithLock
+  (\_ -> mapMOf (csConfigDataL . configInstancesL . alterContainerL iUuid)
+    (\mi -> case mi of
+      Nothing -> throwError . ConfigurationError $
+        printf "Could not find instance with UUID %s" iUuid
+      Just ist -> return . Just $ (instPrimaryNodeL .~ nUuid) ist))
+  (return ())
+
 -- | The configuration is updated by the provided cluster
 updateCluster :: Cluster -> WConfdMonad (MaybeForJSON (Int, TimeAsDoubleJSON))
 updateCluster cluster = do
@@ -501,6 +512,7 @@ exportedFunctions = [ 'addInstance
                     , 'allocatePort
                     , 'attachInstanceDisk
                     , 'markInstanceDisksActive
+                    , 'setInstancePrimaryNode
                     , 'updateCluster
                     , 'updateDisk
                     , 'updateInstance
-- 
1.7.10.4

Reply via email to