diff --git a/lib/rapi/rlib2.py b/lib/rapi/rlib2.py index 4df3c842a624968ebcd0922ae80aa7e230409dac..5074fcefbf5ce774caf25309c4b890d701a60b0f 100644 --- a/lib/rapi/rlib2.py +++ b/lib/rapi/rlib2.py @@ -441,21 +441,21 @@ class R_2_nodes_name_role(baserlib.ResourceBase): return self.SubmitJob([op]) -class R_2_nodes_name_evacuate(baserlib.ResourceBase): +class R_2_nodes_name_evacuate(baserlib.OpcodeResource): """/2/nodes/[node_name]/evacuate resource. """ - def POST(self): + POST_OPCODE = opcodes.OpNodeEvacuate + + def GetPostOpInput(self): """Evacuate all instances off a node. """ - op = baserlib.FillOpcode(opcodes.OpNodeEvacuate, self.request_body, { + return (self.request_body, { "node_name": self.items[0], "dry_run": self.dryRun(), }) - return self.SubmitJob([op]) - class R_2_nodes_name_migrate(baserlib.OpcodeResource): """/2/nodes/[node_name]/migrate resource. diff --git a/test/ganeti.rapi.rlib2_unittest.py b/test/ganeti.rapi.rlib2_unittest.py index bb9e575ff7841a1565ff166226a365ff3e3e2da0..95ab354ec712a5c7c181f8c15c21bce255798ef5 100755 --- a/test/ganeti.rapi.rlib2_unittest.py +++ b/test/ganeti.rapi.rlib2_unittest.py @@ -249,6 +249,29 @@ class TestNodeMigrate(unittest.TestCase): self.assertRaises(IndexError, cl.GetNextSubmittedJob) +class TestNodeEvacuate(unittest.TestCase): + def test(self): + clfactory = _FakeClientFactory(_FakeClient) + handler = _CreateHandler(rlib2.R_2_nodes_name_evacuate, ["node92"], { + "dry-run": ["1"], + }, { + "mode": constants.IALLOCATOR_NEVAC_SEC, + }, clfactory) + job_id = handler.POST() + + cl = clfactory.GetNextClient() + self.assertRaises(IndexError, clfactory.GetNextClient) + + (exp_job_id, (op, )) = cl.GetNextSubmittedJob() + self.assertEqual(job_id, exp_job_id) + self.assertTrue(isinstance(op, opcodes.OpNodeEvacuate)) + self.assertEqual(op.node_name, "node92") + self.assertEqual(op.mode, constants.IALLOCATOR_NEVAC_SEC) + self.assertTrue(op.dry_run) + + self.assertRaises(IndexError, cl.GetNextSubmittedJob) + + class TestParseInstanceCreateRequestVersion1(testutils.GanetiTestCase): def setUp(self): testutils.GanetiTestCase.setUp(self)