BMC event framework¶
https://storyboard.openstack.org/#!/story/2008366
The goal of this spec is to provide an API to manage subscriptions for BMC events. The user will be able to provide a URL where the BMC will post the events.
Non-goals: * Unify event formats or payloads across drivers.
Provide a way to poll for events.
Proxy notifications (see [RFE 2008555](https://storyboard.openstack.org/#!/story/2008555)).
Store events in ironic at all.
Update an existing subscription in the BMC, at this time, as some vendors support partial updates where as other vendors essentially require a delete/re-creation to perform an update. This may be something that can be added later, but it seems not feasible at this time.
Choosing EventTypes when creating a subscription won’t be supported, since option is deprecated since [EventDestination v1_5_0](https://redfish.dmtf.org/schemas/v1/EventDestination.v1_5_0.json).
Support for creating subscriptions with HTTP Headers.
Problem description¶
Some BMC’s have support to subscribe to specific event notifications about the hardware (e.g., overheating, removal of the device).
As an ironic user, I want to configure the BMC to send event notifications about potential failures to a specific URI.
Proposed change¶
Overview¶
This RFE proposes a new top level ReST API subscriptions that will allow listing, creating and deleting subscriptions for nodes.
Subscriptions workflow¶
Create a subscription
POST /v1/nodes/<node_ident>/management/
subscriptions
Delete a subscription
DELETE /v1/nodes/<node_ident>/management/
subscriptions/<subscription_bmc_id>
List subscriptions
GET /v1/nodes/<node_ident>/management/subscriptions
Show subscription
GET /v1/nodes/<node_ident>/management/subscriptions/
<subscription_bmc_id>
Alternatives¶
The user can directly access the BMC and configure the subscriptions.
Data model impact¶
None.
State Machine Impact¶
None.
REST API impact¶
Update the REST API for the node object to allow create/delete/list event subscriptions.
GET /v1/nodes/<node_ident>/management/subscriptions
Retrieves a list of all subscriptions available. Returns a JSON object listing all available subscriptions or empty list.
Error codes:
404 - Node Not Found / microversion not high enough for API consumer.
Example response object:
{ "subscriptions": [ { "id": "<subscription_bmc_id1>", "links": [ { "href": "http://127.0.0.1:6486/v1/nodes/<node_id>/management/ subscriptions/<subscription_bmc_id1>", "rel": "self" }, { "href": "http://127.0.0.1:6486/nodes/<node_id>/management/ subscriptions/<subscription_bmc_id1>", "rel": "bookmark" } ] }, { "id": "<subscription_bmc_id2>", "links": [ { "href": "http://127.0.0.1:6486/v1/nodes/<node_id>/management/ subscriptions/<subscription_bmc_id2>", "rel": "self" }, { "href": "http://127.0.0.1:6486/nodes/<node_id>/management/ subscriptions/<subscription_bmc_id2>", "rel": "bookmark" } ] }, ] }
GET /v1/nodes/<node_ident>/management/subscriptions/subscription_bmc_id
Retrieves a sbuscription. Returns a JSON object representing the choosen subscription (
subscription_bmc_id
).Error codes:
404 Not Found if node or subscription is not found.
{ "id": "<subscription_bmc_id>", "destination": "<destinatination_url>", "protocol": "<protocol>", "context": "<context>", "event_types": ["Alert"] }
POST /v1/nodes/<node_ident>/management/subscriptions
Requests the creation of a subscription.
Required: destination.
HTTP codes:
201 Created
400 Bad Request
{ "destination": "http(s)://host/path", }
DELETE /v1/nodes/<node_ident>/management/subscriptions/ <subscription__bmc_id>
Requests the deletion of a subscription
HTPP codes:
204 No Content
404 Not Found
Note
The PATCH verb is not being supported at this time in this feature.
Client (CLI) impact¶
The following commands will be created:
baremetal node create subscription [node_uuid] [destination]
baremetal node subscription delete [subscription_uuid]
baremetal node subscription list [node]
baremetal node subscription show [node] [subscription_uuid]
“openstacksdk”¶
Add support for the event subscriptions in openstacksdk.
RPC API impact¶
The following new RPC calls will be added:
Create subscription
def create_subscription(self, context, node_id, destination, topic=None):
Delete subscription
def delete_subscription(self, context, node_id, subscription_bmc_id, topic=None):
List subscriptions
def get_all_subscriptions(self, context, node_id, topic=None):
Get a subscription
def get_subscription(self, context, node_id, subscription_bmc_id, topic=None):
Driver API impact¶
The ManagementInterface will be updated with the following functions:
def create_subscription(self, task, destination):
"""Add the new subscription object to the BMC."""
def delete_subscription(self, task, subscription_bmc_id):
"""Remove the subscription from the BMC."""
def get_all_subscriptions(self, task):
"""List all subscriptions from the BMC"""
def get_subscriptions(self, task, subscription_bmc_id):
"""Get a subscriptions from the BMC"""
The above methods are implemented for Redfish hardware types. We will disallow changing the management interface of a node if there are any subscriptions.
Nova driver impact¶
None.
Ramdisk impact¶
None.
Security impact¶
It is recomended to use https.
Other end user impact¶
The user won’t be able to choose the EventTypes
for the subscription,
since the option is deprecated in Redfish EventDestination v1_5_0.
We will be using Alert by default for the EventTypes
.
The user won’t be able to choose the Protocol
for the subscription,
by default it will be Redfish following the schema for EventDestination.
Scalability impact¶
None.
Performance Impact¶
None.
Other deployer impact¶
None.
Developer impact¶
Other drivers may implement this feature if the BMC has support for event subscription.
Implementation¶
Assignee(s)¶
- Primary assignee:
<iurygregory, iurygregory@gmail.com>
Redfish Implementation Details¶
The actual support for EventDestination in sushy is based on schema [2],
since HW vendors are still working on adding support for newer versions where
the propertie EventTypes
is deprecated. Based on this the Ironic API
will only accept the following redfish properties to create a subscription:
Destination - Required
By default we are considering Protocol
as Redfish, EventTypes
as
[“Alert”] and Context
as “”.
When vendors have the support for newer EventDestination new fields will be added to the Ironic API.
Work Items¶
Dependencies¶
None.
Testing¶
Unit Tests
Tempest tests
Upgrades and Backwards Compatibility¶
No upgrade impact.
Documentation Impact¶
API reference will be added
Client documentation will be added.