There are many references to review.openstack.org, and while the redirect should work, we can also go ahead and fix them. Change-Id: Ic82bde84617c461aba1e4a02b3fc562a90c99a6e
4.9 KiB
Expose supported power states
https://bugs.launchpad.net/ironic/+bug/1734827
This SPEC proposes adding a new API to expose supported power states of nodes. This API would be helpful to see if a power action is supported by a node because it depends on whether a power interface supports power actions such as soft power off and soft reboot.
Problem description
Ironic supports soft shutdown and soft reboot since Ocata. However, not all power interfaces support these new power actions. A new API would be necessary to see if a power action is supported by a node. This proposed API is similar to the one for getting a node's supported boot devices, which is described here.
Proposed change
The new APIs will be introduced to get the current power status and the supported power states of nodes. See the 'REST API impact' section and for the details:
- GET /v1/nodes/{node_ident}/states/power
- GET /v1/nodes/{node_ident}/states/power/supported
The new CLI will be also added for the new APIs. See the 'Client (CLI) impact' section and for the details:
openstack baremetal node power show [--supported] <node>
Alternatives
There is another option to only add a new API to get supported power states. There are also a few other options to support the API by the CLI:
- Add a new option to display the supported power states to
openstack baremetal node show
.- Add a new subcommand to show the supported power states like:
openstack baremetal node supported power show
.
However, the current design is better for consistency with the existing APIs and the CLI for the boot devices.
Data model impact
None
State Machine Impact
None
REST API impact
We will introduce the two APIs. They will be available starting with a new Bare Metal API version.
Get the current power state of a node:
GET /v1/nodes/{node_ident}/states/power
The response is like:
{ "power_state": "power on" }
Get the supported power states of a node:
GET /v1/nodes/{node_ident}/states/power/supported
The response contains supported power states of the node: For example:
{ "supported_power_states": [ "power on", "power off", "rebooting", "soft rebooting", "soft power off" ] }
Client (CLI) impact
The openstack baremetal
CLI will support the new
API.
"ironic" CLI
None
A new feature is no longer added to the "ironic" CLI.
"openstack baremetal" CLI
A new subcommnad will be added:
openstack baremetal node power show [--supported] <node>
Without the --supported
option, this command displays
the power state of the specified node. When the --supported
option is specified, this command displays the supported power
states.
RPC API impact
A new RPC API, get_supported_power_states
will be added.
This returns a list of the supported power states of the specified node
synchronously.
Driver API impact
None
The driver API get_suuported_power_states
was already
defined in the base power interface. If a power interface doesn't
override the method, the default list which contains power on, power
off, and reboot is returned.
Nova driver impact
None
The new API is available to see if a requested power action is supported or not. Though it might be helpful for the Nova driver, no change is planned currently.
Ramdisk impact
None
Security impact
None
Other end user impact
None
Scalability impact
None
Performance Impact
None
Other deployer impact
None
Developer impact
None
Implementation
Assignee(s)
- Primary assignee:
-
shiina-hironori (irc:hshiina)
- Other contributors:
-
None
Work Items
- Add the new RPC API.
- Add the new Baremetal APIs.
- Add the OSC baremetal subcommand.
- Add a new API test to tempest.
- Add the new APIs to the API reference.
Dependencies
None
Testing
An API test will be added to Tempest.
Upgrades and Backwards Compatibility
None
Documentation Impact
The new APIs will be added to the Baremetal API Reference.
References
This change was originally mentioned in reviewing a SPEC to support soft shutdown.: https://review.opendev.org/#/c/186700/