Hi Alex, Yiannis,
Thank you for the patch! LGTM.
Viktor
On Monday, February 6, 2017 at 2:17:22 PM UTC, Yiannis Tsiouris wrote:
>
> '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
>
>