RAPI client: Support renaming instances
authorMichael Hanselmann <hansmi@google.com>
Fri, 30 Jul 2010 17:33:31 +0000 (19:33 +0200)
committerMichael Hanselmann <hansmi@google.com>
Tue, 10 Aug 2010 15:56:06 +0000 (17:56 +0200)
Signed-off-by: Michael Hanselmann <hansmi@google.com>
Reviewed-by: Iustin Pop <iustin@google.com>

lib/rapi/client.py
test/ganeti.rapi.client_unittest.py

index 4573375..5edbece 100644 (file)
@@ -971,6 +971,33 @@ class GanetiRapiClient(object):
                              ("/%s/instances/%s/migrate" %
                               (GANETI_RAPI_VERSION, instance)), None, body)
 
+  def RenameInstance(self, instance, new_name, ip_check=None, name_check=None):
+    """Changes the name of an instance.
+
+    @type instance: string
+    @param instance: Instance name
+    @type new_name: string
+    @param new_name: New instance name
+    @type ip_check: bool
+    @param ip_check: Whether to ensure instance's IP address is inactive
+    @type name_check: bool
+    @param name_check: Whether to ensure instance's name is resolvable
+
+    """
+    body = {
+      "new_name": new_name,
+      }
+
+    if ip_check is not None:
+      body["ip_check"] = ip_check
+
+    if name_check is not None:
+      body["name_check"] = name_check
+
+    return self._SendRequest(HTTP_PUT,
+                             ("/%s/instances/%s/rename" %
+                              (GANETI_RAPI_VERSION, instance)), None, body)
+
   def GetJobs(self):
     """Gets all jobs for the cluster.
 
index eaa29e5..b696429 100755 (executable)
@@ -741,6 +741,35 @@ class GanetiRapiClientTests(testutils.GanetiTestCase):
         self.assertEqual(data["mode"], mode)
         self.assertEqual(data["cleanup"], cleanup)
 
+  def testRenameInstanceDefaults(self):
+    new_name = "newnametha7euqu"
+    self.rapi.AddResponse("8791")
+    job_id = self.client.RenameInstance("inst18821", new_name)
+    self.assertEqual(job_id, 8791)
+    self.assertHandler(rlib2.R_2_instances_name_rename)
+    self.assertItems(["inst18821"])
+
+    data = serializer.LoadJson(self.rapi.GetLastRequestData())
+    self.assertEqualValues(data, {"new_name": new_name, })
+
+  def testRenameInstance(self):
+    new_name = "new-name-yiux1iin"
+    for ip_check in [False, True]:
+      for name_check in [False, True]:
+        self.rapi.AddResponse("24776")
+        job_id = self.client.RenameInstance("inst20967", new_name,
+                                             ip_check=ip_check,
+                                             name_check=name_check)
+        self.assertEqual(job_id, 24776)
+        self.assertHandler(rlib2.R_2_instances_name_rename)
+        self.assertItems(["inst20967"])
+
+        data = serializer.LoadJson(self.rapi.GetLastRequestData())
+        self.assertEqual(len(data), 3)
+        self.assertEqual(data["new_name"], new_name)
+        self.assertEqual(data["ip_check"], ip_check)
+        self.assertEqual(data["name_check"], name_check)
+
   def testGetJobs(self):
     self.rapi.AddResponse('[ { "id": "123", "uri": "\\/2\\/jobs\\/123" },'
                           '  { "id": "124", "uri": "\\/2\\/jobs\\/124" } ]')