'gnt-instance migrate' supports performing a failover on an instance
that is not possible to migrate (e.g. if the instance is down). This
patch exposes this option ('--allow-failover') to the RAPI client.Signed-off-by: Yiannis Tsiouris <[email protected]> Signed-off-by: Alex Kiousis <[email protected]> --- lib/rapi/client.py | 6 +++++- test/py/ganeti.rapi.client_unittest.py | 23 +++++++++++++---------- 2 files changed, 18 insertions(+), 11 deletions(-) diff --git a/lib/rapi/client.py b/lib/rapi/client.py index 4f6c8b62b..5128936bf 100644 --- a/lib/rapi/client.py +++ b/lib/rapi/client.py @@ -1342,7 +1342,7 @@ class GanetiRapiClient(object): # pylint: disable=R0904 (GANETI_RAPI_VERSION, instance)), query, body) def MigrateInstance(self, instance, mode=None, cleanup=None, - target_node=None, reason=None): + target_node=None, reason=None, allow_failover=None): """Migrates an instance. @type instance: string @@ -1355,6 +1355,9 @@ class GanetiRapiClient(object): # pylint: disable=R0904 @param target_node: Target Node for externally mirrored instances @type reason: string @param reason: the reason for executing this operation + @type allow_failover: bool + @param allow_failover: Whether to fallback to failover if migration is not + possible @rtype: string @return: job id @@ -1363,6 +1366,7 @@ class GanetiRapiClient(object): # pylint: disable=R0904 _SetItemIf(body, mode is not None, "mode", mode) _SetItemIf(body, cleanup is not None, "cleanup", cleanup) _SetItemIf(body, target_node is not None, "target_node", target_node) + _SetItemIf(body, allow_failover is not None, "allow_failover", allow_failover) query = [] _AppendReason(query, reason) diff --git a/test/py/ganeti.rapi.client_unittest.py b/test/py/ganeti.rapi.client_unittest.py index 9c534e5c6..0ddfdb4c4 100755 --- a/test/py/ganeti.rapi.client_unittest.py +++ b/test/py/ganeti.rapi.client_unittest.py @@ -781,17 +781,20 @@ class GanetiRapiClientTests(testutils.GanetiTestCase): def testMigrateInstance(self): for mode in constants.HT_MIGRATION_MODES: for cleanup in [False, True]: - self.rapi.AddResponse("31910") - job_id = self.client.MigrateInstance("inst289", mode=mode, - cleanup=cleanup) - self.assertEqual(job_id, 31910) - self.assertHandler(rlib2.R_2_instances_name_migrate) - self.assertItems(["inst289"]) + for allow_failover in [False, True]: + self.rapi.AddResponse("31910") + job_id = self.client.MigrateInstance("inst289", mode=mode, + cleanup=cleanup, + allow_failover=allow_failover) + self.assertEqual(job_id, 31910) + self.assertHandler(rlib2.R_2_instances_name_migrate) + self.assertItems(["inst289"]) - data = serializer.LoadJson(self.rapi.GetLastRequestData()) - self.assertEqual(len(data), 2) - self.assertEqual(data["mode"], mode) - self.assertEqual(data["cleanup"], cleanup) + data = serializer.LoadJson(self.rapi.GetLastRequestData()) + self.assertEqual(len(data), 3) + self.assertEqual(data["mode"], mode) + self.assertEqual(data["cleanup"], cleanup) + self.assertEqual(data["allow_failover"], allow_failover) def testFailoverInstanceDefaults(self): self.rapi.AddResponse("7639") -- 2.11.0
