diff --git a/lib/rapi/rlib2.py b/lib/rapi/rlib2.py index 1fd7577c99436a7821f200d1cf0f3ee285c29b3f..51875354ded64b3faeb05cb6f4c338c2ba607d41 100644 --- a/lib/rapi/rlib2.py +++ b/lib/rapi/rlib2.py @@ -823,28 +823,27 @@ class R_2_instances_name_reboot(baserlib.OpcodeResource): }) -class R_2_instances_name_startup(baserlib.ResourceBase): +class R_2_instances_name_startup(baserlib.OpcodeResource): """/2/instances/[instance_name]/startup resource. Implements an instance startup. """ - def PUT(self): + PUT_OPCODE = opcodes.OpInstanceStartup + + def GetPutOpInput(self): """Startup an instance. The URI takes force=[False|True] parameter to start the instance if even if secondary disks are failing. """ - instance_name = self.items[0] - force_startup = bool(self._checkIntVariable("force")) - no_remember = bool(self._checkIntVariable("no_remember")) - op = opcodes.OpInstanceStartup(instance_name=instance_name, - force=force_startup, - dry_run=bool(self.dryRun()), - no_remember=no_remember) - - return self.SubmitJob([op]) + return ({}, { + "instance_name": self.items[0], + "force": self.useForce(), + "dry_run": self.dryRun(), + "no_remember": bool(self._checkIntVariable("no_remember")), + }) def _ParseShutdownInstanceRequest(name, data, dry_run, no_remember): diff --git a/test/ganeti.rapi.rlib2_unittest.py b/test/ganeti.rapi.rlib2_unittest.py index 9c3b32e0ac8787492f2a4f156129a513f45dd0c2..5cd05746ffe86da228dcb0bc3dded4153bf03c86 100755 --- a/test/ganeti.rapi.rlib2_unittest.py +++ b/test/ganeti.rapi.rlib2_unittest.py @@ -361,6 +361,29 @@ class TestInstanceReboot(unittest.TestCase): self.assertRaises(IndexError, cl.GetNextSubmittedJob) +class TestInstanceStartup(unittest.TestCase): + def test(self): + clfactory = _FakeClientFactory(_FakeClient) + handler = _CreateHandler(rlib2.R_2_instances_name_startup, ["inst31083"], { + "force": ["1"], + "no_remember": ["1"], + }, {}, clfactory) + job_id = handler.PUT() + + 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.OpInstanceStartup)) + self.assertEqual(op.instance_name, "inst31083") + self.assertTrue(op.no_remember) + self.assertTrue(op.force) + self.assertFalse(op.dry_run) + + self.assertRaises(IndexError, cl.GetNextSubmittedJob) + + class TestParseInstanceCreateRequestVersion1(testutils.GanetiTestCase): def setUp(self): testutils.GanetiTestCase.setUp(self)