diff --git a/ironic/common/states.py b/ironic/common/states.py index 8c6dcf3853..f5a620f992 100644 --- a/ironic/common/states.py +++ b/ironic/common/states.py @@ -667,5 +667,8 @@ machine.add_transition(SERVICEFAIL, SERVICING, 'service') # A node in service fail can be rescued machine.add_transition(SERVICEFAIL, RESCUING, 'rescue') -# A no in service fail may be deleted. +# A node in service fail may be deleted. machine.add_transition(SERVICEFAIL, DELETING, 'delete') + +# A node in service wait may be deleted. +machine.add_transition(SERVICEWAIT, DELETING, 'delete') diff --git a/ironic/tests/unit/api/controllers/v1/test_node.py b/ironic/tests/unit/api/controllers/v1/test_node.py index d501e8eeeb..95163d9010 100644 --- a/ironic/tests/unit/api/controllers/v1/test_node.py +++ b/ironic/tests/unit/api/controllers/v1/test_node.py @@ -6229,6 +6229,23 @@ ORHMKeXMO8fcK0By7CiMKwHSXCoEQgfQhWwpMdSsO8LgHCjh87DQc= """ self.assertEqual(urlparse.urlparse(ret.location).path, expected_location) + def test_provision_with_unprovision_in_service_wait(self): + node = self.node + node.provision_state = states.SERVICEWAIT + node.target_provision_state = states.ACTIVE + node.save() + ret = self.put_json('/nodes/%s/states/provision' % node.uuid, + {'target': states.DELETED}) + self.assertEqual(http_client.ACCEPTED, ret.status_code) + self.assertEqual(b'', ret.body) + self.mock_dntd.assert_called_once_with( + mock.ANY, mock.ANY, node.uuid, 'test-topic') + # Check location header + self.assertIsNotNone(ret.location) + expected_location = '/v1/nodes/%s/states' % node.uuid + self.assertEqual(urlparse.urlparse(ret.location).path, + expected_location) + @mock.patch.object(rpcapi.ConductorAPI, 'do_provisioning_action', autospec=True) def test_provide_from_manage(self, mock_dpa): diff --git a/releasenotes/notes/service-wait-unprovision-dacfa468824335b7.yaml b/releasenotes/notes/service-wait-unprovision-dacfa468824335b7.yaml new file mode 100644 index 0000000000..e14d0621d1 --- /dev/null +++ b/releasenotes/notes/service-wait-unprovision-dacfa468824335b7.yaml @@ -0,0 +1,5 @@ +--- +features: + - | + Add support for a node in ``service wait`` state can be unprovisioned + via the ``delete`` provision action.