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