From 4ee722878a3d8c919bdc74b84d1c52ff0d3350ac Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Ren=C3=A9=20Nussbaumer?= <rn@google.com>
Date: Wed, 19 Sep 2012 13:45:59 +0200
Subject: [PATCH] Adding RAPI resource for multi-allocation
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

This is straightforward.

Signed-off-by: RenΓ© Nussbaumer <rn@google.com>
Reviewed-by: Michael Hanselmann <hansmi@google.com>
---
 doc/rapi.rst                        | 19 +++++++++++++++++++
 lib/rapi/connector.py               |  1 +
 lib/rapi/rlib2.py                   | 18 ++++++++++++++++++
 test/ganeti.rapi.client_unittest.py |  1 +
 4 files changed, 39 insertions(+)

diff --git a/doc/rapi.rst b/doc/rapi.rst
index ac20323b4..9f8b1b9d1 100644
--- a/doc/rapi.rst
+++ b/doc/rapi.rst
@@ -628,6 +628,25 @@ to URI like::
 It supports the ``dry-run`` argument.
 
 
+``/2/instances-multi-alloc``
+++++++++++++++++++++++++++++
+
+Tries to allocate multiple instances.
+
+It supports the following commands: ``POST``
+
+``POST``
+~~~~~~~~
+
+The parameters:
+
+.. opcode_params:: OP_INSTANCE_MULTI_ALLOC
+
+Job result:
+
+.. opcode_result:: OP_INSTANCE_MULTI_ALLOC
+
+
 ``/2/instances``
 ++++++++++++++++
 
diff --git a/lib/rapi/connector.py b/lib/rapi/connector.py
index b701d7141..0fe7071e1 100644
--- a/lib/rapi/connector.py
+++ b/lib/rapi/connector.py
@@ -185,6 +185,7 @@ def GetHandlers(node_name_pattern, instance_name_pattern,
     re.compile(r"^/2/jobs/(%s)/wait$" % job_id_pattern):
       rlib2.R_2_jobs_id_wait,
 
+    "/2/instances-multi-alloc": rlib2.R_2_instances_multi_alloc,
     "/2/tags": rlib2.R_2_tags,
     "/2/info": rlib2.R_2_info,
     "/2/os": rlib2.R_2_os,
diff --git a/lib/rapi/rlib2.py b/lib/rapi/rlib2.py
index e77dca8a8..b5514c42a 100644
--- a/lib/rapi/rlib2.py
+++ b/lib/rapi/rlib2.py
@@ -812,6 +812,24 @@ class R_2_instances(baserlib.OpcodeResource):
       })
 
 
+class R_2_instances_multi_alloc(baserlib.OpcodeResource):
+  """/2/instances-multi-alloc resource.
+
+  """
+  POST_OPCODE = opcodes.OpInstanceMultiAlloc
+
+  def GetPostOpInput(self):
+    """Try to allocate multiple instances.
+
+    @return: A dict with submitted jobs, allocatable instances and failed
+             allocations
+
+    """
+    return (self.request_body, {
+      "dry_run": self.dryRun(),
+      })
+
+
 class R_2_instances_name(baserlib.OpcodeResource):
   """/2/instances/[instance_name] resource.
 
diff --git a/test/ganeti.rapi.client_unittest.py b/test/ganeti.rapi.client_unittest.py
index a09d4a2e2..ade61908c 100755
--- a/test/ganeti.rapi.client_unittest.py
+++ b/test/ganeti.rapi.client_unittest.py
@@ -46,6 +46,7 @@ import testutils
 _KNOWN_UNUSED = set([
   rlib2.R_root,
   rlib2.R_2,
+  rlib2.R_2_instances_multi_alloc,
   ])
 
 # Global variable for collecting used handlers
-- 
GitLab