Revision 0dbaa9ca

b/doc/rapi.rst
337 337

  
338 338
The groups resource.
339 339

  
340
It supports the following commands: ``GET``.
340
It supports the following commands: ``GET``, ``POST``.
341 341

  
342 342
``GET``
343 343
~~~~~~~
......
383 383
      }
384 384
    ]
385 385

  
386
``POST``
387
~~~~~~~~
388

  
389
Creates a node group.
390

  
391
If the optional bool *dry-run* argument is provided, the job will not be
392
actually executed, only the pre-execution checks will be done.
393

  
394
Returns: a job ID that can be used later for polling.
395

  
396
Body parameters:
397

  
398
``name`` (string, required)
399
  Node group name.
400

  
401

  
386 402
``/2/groups/[group_name]``
387
+++++++++++++++++++++++++++++++++
403
++++++++++++++++++++++++++
388 404

  
389 405
Returns information about a node group.
390 406

  
391
It supports the following commands: ``GET``.
407
It supports the following commands: ``GET``, ``DELETE``.
408

  
409
``GET``
410
~~~~~~~
411

  
412
Returns information about a node group, similar to the bulk output from
413
the node group list.
414

  
415
``DELETE``
416
~~~~~~~~~~
417

  
418
Deletes a node group.
419

  
420
It supports the ``dry-run`` argument.
421

  
422

  
423
``/2/groups/[group_name]/rename``
424
+++++++++++++++++++++++++++++++++
425

  
426
Renames a node group.
427

  
428
Supports the following commands: ``PUT``.
429

  
430
``PUT``
431
~~~~~~~
432

  
433
Returns a job ID.
434

  
435
Body parameters:
436

  
437
``new_name`` (string, required)
438
  New node group name.
392 439

  
393 440

  
394 441
``/2/instances``
b/lib/rapi/connector.py
215 215
    "/2/groups": rlib2.R_2_groups,
216 216
    re.compile(r'^/2/groups/(%s)$' % group_name_pattern):
217 217
      rlib2.R_2_groups_name,
218
    re.compile(r'^/2/groups/(%s)/rename$' % group_name_pattern):
219
      rlib2.R_2_groups_name_rename,
218 220

  
219 221
    "/2/jobs": rlib2.R_2_jobs,
220 222
    re.compile(r"^/2/jobs/(%s)$" % job_id_pattern):
b/lib/rapi/rlib2.py
550 550
      return baserlib.BuildUriList(groupnames, "/2/groups/%s",
551 551
                                   uri_fields=("name", "uri"))
552 552

  
553
  def POST(self):
554
    """Create a node group.
555

  
556
    @return: a job id
557

  
558
    """
559
    baserlib.CheckType(self.request_body, dict, "Body contents")
560
    group_name = baserlib.CheckParameter(self.request_body, "name")
561
    op = opcodes.OpAddGroup(group_name=group_name, dry_run=self.dryRun())
562
    return baserlib.SubmitJob([op])
563

  
553 564

  
554 565
class R_2_groups_name(baserlib.R_Generic):
555 566
  """/2/groups/[group_name] resources.
......
568 579

  
569 580
    return baserlib.MapFields(G_FIELDS, result[0])
570 581

  
582
  def DELETE(self):
583
    """Delete a node group.
584

  
585
    """
586
    op = opcodes.OpRemoveGroup(group_name=self.items[0],
587
                               dry_run=bool(self.dryRun()))
588

  
589
    return baserlib.SubmitJob([op])
590

  
591

  
592
def _ParseRenameGroupRequest(name, data, dry_run):
593
  """Parses a request for renaming a node group.
594

  
595
  @type name: string
596
  @param name: name of the node group to rename
597
  @type data: dict
598
  @param data: the body received by the rename request
599
  @type dry_run: bool
600
  @param dry_run: whether to perform a dry run
601

  
602
  @rtype: L{opcodes.OpRenameGroup}
603
  @return: Node group rename opcode
604

  
605
  """
606
  old_name = name
607
  new_name = baserlib.CheckParameter(data, "new_name")
608

  
609
  return opcodes.OpRenameGroup(old_name=old_name, new_name=new_name,
610
                               dry_run=dry_run)
611

  
612

  
613
class R_2_groups_name_rename(baserlib.R_Generic):
614
  """/2/groups/[groupe_name]/rename resource.
615

  
616
  """
617
  def PUT(self):
618
    """Changes the name of a node group.
619

  
620
    @return: a job id
621

  
622
    """
623
    baserlib.CheckType(self.request_body, dict, "Body contents")
624
    op = _ParseRenameGroupRequest(self.items[0], self.request_body,
625
                                  self.dryRun())
626
    return baserlib.SubmitJob([op])
571 627

  
572 628

  
573 629
def _ParseInstanceCreateRequestVersion1(data, dry_run):
b/test/ganeti.rapi.rlib2_unittest.py
409 409
    self.assertFalse(ops[1].osparams)
410 410

  
411 411

  
412
class TestParseRenameGroupRequest(testutils.GanetiTestCase):
413
  def setUp(self):
414
    testutils.GanetiTestCase.setUp(self)
415

  
416
    self.Parse = rlib2._ParseRenameGroupRequest
417

  
418
  def test(self):
419
    name = "instij0eeph7"
420
    data = {
421
      "new_name": "ua0aiyoo",
422
      }
423

  
424
    op = self.Parse(name, data, False)
425

  
426
    self.assert_(isinstance(op, opcodes.OpRenameGroup))
427
    self.assertEqual(op.old_name, name)
428
    self.assertEqual(op.new_name, "ua0aiyoo")
429
    self.assertFalse(op.dry_run)
430

  
431
  def testDryRun(self):
432
    name = "instij0eeph7"
433
    data = {
434
      "new_name": "ua0aiyoo",
435
      }
436

  
437
    op = self.Parse(name, data, True)
438

  
439
    self.assert_(isinstance(op, opcodes.OpRenameGroup))
440
    self.assertEqual(op.old_name, name)
441
    self.assertEqual(op.new_name, "ua0aiyoo")
442
    self.assert_(op.dry_run)
443

  
444

  
412 445
if __name__ == '__main__':
413 446
  testutils.GanetiTestProgram()

Also available in: Unified diff