Revision 94497dd1

b/doc/rapi.rst
1326 1326

  
1327 1327
It supports the bool ``force`` argument.
1328 1328

  
1329

  
1330
``/2/nodes/[node_name]/modify``
1331
+++++++++++++++++++++++++++++++++
1332

  
1333
Modifies the parameters of a node. Supports the following commands:
1334
``POST``.
1335

  
1336
``POST``
1337
~~~~~~~
1338

  
1339
Returns a job ID.
1340

  
1341
Body parameters:
1342

  
1343
.. opcode_params:: OP_NODE_SET_PARAMS
1344
   :exclude: node_name
1345

  
1346
Job result:
1347

  
1348
.. opcode_result:: OP_NODE_SET_PARAMS
1349

  
1350

  
1329 1351
``/2/nodes/[node_name]/storage``
1330 1352
++++++++++++++++++++++++++++++++
1331 1353

  
b/lib/rapi/client.py
1449 1449
                             ("/%s/nodes/%s/role" %
1450 1450
                              (GANETI_RAPI_VERSION, node)), query, role)
1451 1451

  
1452
  def ModifyNode(self, group, **kwargs):
1453
    """Modifies a node.
1454

  
1455
    More details for parameters can be found in the RAPI documentation.
1456

  
1457
    @type group: string
1458
    @param group: Node name
1459
    @rtype: string
1460
    @return: job id
1461

  
1462
    """
1463
    return self._SendRequest(HTTP_POST,
1464
                             ("/%s/nodes/%s/modify" %
1465
                              (GANETI_RAPI_VERSION, group)), None, kwargs)
1466

  
1452 1467
  def GetNodeStorageUnits(self, node, storage_type, output_fields):
1453 1468
    """Gets the storage units for a node.
1454 1469

  
b/lib/rapi/connector.py
177 177
      rlib2.R_2_nodes_name_evacuate,
178 178
    re.compile(r"^/2/nodes/(%s)/migrate$" % node_name_pattern):
179 179
      rlib2.R_2_nodes_name_migrate,
180
    re.compile(r"^/2/nodes/(%s)/modify$" % node_name_pattern):
181
      rlib2.R_2_nodes_name_modify,
180 182
    re.compile(r"^/2/nodes/(%s)/storage$" % node_name_pattern):
181 183
      rlib2.R_2_nodes_name_storage,
182 184
    re.compile(r"^/2/nodes/(%s)/storage/modify$" % node_name_pattern):
b/lib/rapi/rlib2.py
497 497
    return baserlib.SubmitJob([op])
498 498

  
499 499

  
500
class R_2_nodes_name_modify(baserlib.R_Generic):
501
  """/2/nodes/[node_name]/modify resource.
502

  
503
  """
504
  def POST(self):
505
    """Changes parameters of a node.
506

  
507
    @return: a job id
508

  
509
    """
510
    baserlib.CheckType(self.request_body, dict, "Body contents")
511

  
512
    op = baserlib.FillOpcode(opcodes.OpNodeSetParams, self.request_body, {
513
      "instance_name": self.items[0],
514
      })
515

  
516
    return baserlib.SubmitJob([op])
517

  
518

  
500 519
class R_2_nodes_name_storage(baserlib.R_Generic):
501 520
  """/2/nodes/[node_name]/storage resource.
502 521

  
b/test/ganeti.rapi.client_unittest.py
973 973
    self.assertQuery("force", ["1"])
974 974
    self.assertEqual("\"master-candidate\"", self.rapi.GetLastRequestData())
975 975

  
976
  def testModifyNode(self):
977
    self.rapi.AddResponse("3783")
978
    job_id = self.client.ModifyNode("node16979.example.com", drained=True)
979
    self.assertEqual(job_id, 3783)
980
    self.assertHandler(rlib2.R_2_nodes_name_modify)
981
    self.assertItems(["node16979.example.com"])
982
    self.assertEqual(self.rapi.CountPending(), 0)
983

  
976 984
  def testGetNodeStorageUnits(self):
977 985
    self.rapi.AddResponse("42")
978 986
    self.assertEqual(42,

Also available in: Unified diff