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