From 73452f12b205c2155bc5ce7350f6724c3679a4bb Mon Sep 17 00:00:00 2001 From: Michael Hanselmann <hansmi@google.com> Date: Thu, 30 Jul 2009 12:46:23 +0200 Subject: [PATCH] rapi: Add /2/[node_name]/evacuate resource This can be used to evacuate a node. Signed-off-by: Michael Hanselmann <hansmi@google.com> Reviewed-by: Iustin Pop <iustin@google.com> --- doc/rapi.rst | 16 ++++++++++++++++ lib/rapi/connector.py | 2 ++ lib/rapi/rlib2.py | 19 +++++++++++++++++++ 3 files changed, 37 insertions(+) diff --git a/doc/rapi.rst b/doc/rapi.rst index a913b3215..b14b8f2a9 100644 --- a/doc/rapi.rst +++ b/doc/rapi.rst @@ -464,6 +464,22 @@ Example:: ... ] +``/2/nodes/[node_name]/evacuate`` ++++++++++++++++++++++++++++++++++ + +Evacuates all secondary instances off a node. + +It supports the following commands: ``POST``. + +``POST`` +~~~~~~~~ + +To evacuate a node, either one of the ``iallocator`` or ``remote_node`` +parameters must be passed: + + evacuate?iallocator=[iallocator] + evacuate?remote_node=[nodeX.example.com] + ``/2/nodes/[node_name]/role`` +++++++++++++++++++++++++++++ diff --git a/lib/rapi/connector.py b/lib/rapi/connector.py index c3c12e6c7..1b9d64666 100644 --- a/lib/rapi/connector.py +++ b/lib/rapi/connector.py @@ -155,6 +155,8 @@ CONNECTOR.update({ re.compile(r'^/2/nodes/([\w\._-]+)$'): rlib2.R_2_nodes_name, re.compile(r'^/2/nodes/([\w\._-]+)/tags$'): rlib2.R_2_nodes_name_tags, re.compile(r'^/2/nodes/([\w\._-]+)/role$'): rlib2.R_2_nodes_name_role, + re.compile(r'^/2/nodes/([\w\._-]+)/evacuate$'): + rlib2.R_2_nodes_name_evacuate, "/2/instances": rlib2.R_2_instances, re.compile(r'^/2/instances/([\w\._-]+)$'): rlib2.R_2_instances_name, re.compile(r'^/2/instances/([\w\._-]+)/tags$'): rlib2.R_2_instances_name_tags, diff --git a/lib/rapi/rlib2.py b/lib/rapi/rlib2.py index 9c8e2a09f..9ef6247ab 100644 --- a/lib/rapi/rlib2.py +++ b/lib/rapi/rlib2.py @@ -261,6 +261,25 @@ class R_2_nodes_name_role(baserlib.R_Generic): return baserlib.SubmitJob([op]) +class R_2_nodes_name_evacuate(baserlib.R_Generic): + """/2/nodes/[node_name]/evacuate resource. + + """ + def POST(self): + """Evacuate all secondary instances off a node. + + """ + node_name = self.items[0] + remote_node = self._checkStringVariable("remote_node", default=None) + iallocator = self._checkStringVariable("iallocator", default=None) + + op = opcodes.OpEvacuateNode(node_name=node_name, + remote_node=remote_node, + iallocator=iallocator) + + return baserlib.SubmitJob([op]) + + class R_2_instances(baserlib.R_Generic): """/2/instances resource. -- GitLab