In some cases we do not want to migrate an instance off a node. Add a function to change all OpMigrate to a corresponding OpFailover. This will simplify the handling of such code.
Signed-off-by: Klaus Aehlig <[email protected]> --- src/Ganeti/Jobs.hs | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/src/Ganeti/Jobs.hs b/src/Ganeti/Jobs.hs index 924ed56..642046b 100644 --- a/src/Ganeti/Jobs.hs +++ b/src/Ganeti/Jobs.hs @@ -40,10 +40,12 @@ module Ganeti.Jobs , execJobsWaitOk , execJobsWaitOkJid , waitForJobs + , forceFailover ) where import Control.Exception (bracket) import Control.Monad (void, forM) +import Data.Functor.Identity (runIdentity) import Data.List import Data.Tuple import Data.IORef @@ -196,3 +198,19 @@ execJobsWaitOkJid opcodes client = do execJobsWaitOk :: [[MetaOpCode]] -> L.Client -> IO (Result ()) execJobsWaitOk opcodes = fmap void . execJobsWaitOkJid opcodes + +-- | Channge Migrations to Failovers +forceFailover :: OpCode -> OpCode +forceFailover op@(OpInstanceMigrate {}) = runIdentity $ do + timeout <- mkNonNegative C.defaultShutdownTimeout + return OpInstanceFailover { opInstanceName = opInstanceName op + , opInstanceUuid = opInstanceUuid op + , opShutdownTimeout = timeout + , opIgnoreConsistency = True + , opTargetNode = opTargetNode op + , opTargetNodeUuid = opTargetNodeUuid op + , opIgnoreIpolicy = opIgnoreIpolicy op + , opMigrationCleanup = opMigrationCleanup op + , opIallocator = opIallocator op + } +forceFailover op = op -- 2.5.0.rc2.392.g76e840b
