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 
>
>

Reply via email to