diff --git a/doc/rapi.rst b/doc/rapi.rst index 1a9294d407d4b71565af8694b814775fa119d844..92c923a9277f8592937510927d78d4abba7ff8dd 100644 --- a/doc/rapi.rst +++ b/doc/rapi.rst @@ -570,6 +570,18 @@ Modifies parameters of storage units on the node. Requires the parameters of the storage unit). Parameters can be passed additionally. Currently only ``allocatable`` (bool) is supported. The result will be a job id. +``/2/nodes/[node_name]/storage/repair`` ++++++++++++++++++++++++++++++++++++++++ + +Repairs a storage unit on the node. + +``PUT`` +~~~~~~~ + +Repairs a storage unit on the node. Requires the parameters ``storage_type`` +(currently only ``lvm-vg`` can be repaired) and ``name`` (name of the storage +unit). The result will be a job id. + ``/2/nodes/[node_name]/tags`` +++++++++++++++++++++++++++++ diff --git a/lib/rapi/connector.py b/lib/rapi/connector.py index d82780b51a56261e30ea2bf2f9c7d6b8336d9956..96d616e17454dd89909b17c913b826c7827bfbd1 100644 --- a/lib/rapi/connector.py +++ b/lib/rapi/connector.py @@ -163,6 +163,8 @@ CONNECTOR.update({ rlib2.R_2_nodes_name_storage, re.compile(r'^/2/nodes/([\w\._-]+)/storage/modify$'): rlib2.R_2_nodes_name_storage_modify, + re.compile(r'^/2/nodes/([\w\._-]+)/storage/repair$'): + rlib2.R_2_nodes_name_storage_repair, "/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 3a398a572368ea7f500da5944593e683ae04541b..72937c3b579fb014acd3b8799ea4dea197b6284a 100644 --- a/lib/rapi/rlib2.py +++ b/lib/rapi/rlib2.py @@ -353,6 +353,29 @@ class R_2_nodes_name_storage_modify(baserlib.R_Generic): return baserlib.SubmitJob([op]) +class R_2_nodes_name_storage_repair(baserlib.R_Generic): + """/2/nodes/[node_name]/storage/repair ressource. + + """ + def PUT(self): + node_name = self.items[0] + + storage_type = self._checkStringVariable("storage_type", None) + if not storage_type: + raise http.HttpBadRequest("Missing the required 'storage_type'" + " parameter") + + name = self._checkStringVariable("name", None) + if not name: + raise http.HttpBadRequest("Missing the required 'name'" + " parameter") + + op = opcodes.OpRepairNodeStorage(node_name=node_name, + storage_type=storage_type, + name=name) + return baserlib.SubmitJob([op]) + + class R_2_instances(baserlib.R_Generic): """/2/instances resource.