diff --git a/doc/rapi.rst b/doc/rapi.rst index 09fab7a15dbfe8064e836513ac2ee08a0948f57b..9d95c81470c75cd77021138da3a51fe0d2209216 100644 --- a/doc/rapi.rst +++ b/doc/rapi.rst @@ -541,6 +541,19 @@ Requests a list of storage units on a node. Requires the parameters ``output_fields``. The result will be a job id, using which the result can be retrieved. +``/2/nodes/[node_name]/storage/modify`` ++++++++++++++++++++++++++++++++++++++++ + +Modifies storage units on the node. + +``PUT`` +~~~~~~~ + +Modifies parameters of storage units on the node. Requires the parameters +``storage_type`` (one of ``file``, ``lvm-pv`` or ``lvm-vg``) and ``name`` (name +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]/tags`` +++++++++++++++++++++++++++++ diff --git a/lib/rapi/connector.py b/lib/rapi/connector.py index 80c7aed4038887570e1a39a75b666377e751b5fd..59621a9e5611dad0a28a34b6d160d4ec18bac825 100644 --- a/lib/rapi/connector.py +++ b/lib/rapi/connector.py @@ -161,6 +161,8 @@ CONNECTOR.update({ rlib2.R_2_nodes_name_migrate, re.compile(r'^/2/nodes/([\w\._-]+)/storage$'): rlib2.R_2_nodes_name_storage, + re.compile(r'^/2/nodes/([\w\._-]+)/storage/modify$'): + rlib2.R_2_nodes_name_storage_modify, "/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 ba40b44a60153aedb45e0579148fa92742ab6853..9b0ac0fe99c88390584dd52c900361932096ba55 100644 --- a/lib/rapi/rlib2.py +++ b/lib/rapi/rlib2.py @@ -323,6 +323,36 @@ class R_2_nodes_name_storage(baserlib.R_Generic): return baserlib.SubmitJob([op]) +class R_2_nodes_name_storage_modify(baserlib.R_Generic): + """/2/nodes/[node_name]/storage/modify 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") + + changes = {} + + if "allocatable" in self.queryargs: + changes[constants.SF_ALLOCATABLE] = \ + bool(self._checkIntVariable("allocatable", default=1)) + + op = opcodes.OpModifyNodeStorage(node_name=node_name, + storage_type=storage_type, + name=name, + changes=changes) + return baserlib.SubmitJob([op]) + + class R_2_instances(baserlib.R_Generic): """/2/instances resource.