Fix subscription vendor passthru
* Instead of specifying the fields we want to oomit from create/get subscription, now we are specifying the fields we want to be returned (This will avoid problems when vendors are using different versions) * When validating create_subscription are requiring that Context and Protocol are present, use the default value from Redfish in case they are not present in the Body request. * When trying to delete a subscription that doesn't exist Ironic returns 500 (default code from IronicException), this commit updates the code to 404 to show that the subscription doesn't exist. Change-Id: I81907be1ebc293118f5ffde4fd4d0485ade390df
This commit is contained in:
parent
512364df9d
commit
a8bbfae5aa
@ -30,9 +30,8 @@ sushy = importutils.try_import('sushy')
|
||||
|
||||
LOG = log.getLogger(__name__)
|
||||
METRICS = metrics_utils.get_metrics_logger(__name__)
|
||||
SUBSCRIPTION_FIELDS_REMOVE = {
|
||||
'@odata.context', '@odate.etag', '@odata.id', '@odata.type',
|
||||
'HttpHeaders', 'Oem', 'Name', 'Description'
|
||||
SUBSCRIPTION_COMMON_FIELDS = {
|
||||
'Id', 'Context', 'Protocol', 'Destination', 'EventTypes'
|
||||
}
|
||||
|
||||
|
||||
@ -111,8 +110,10 @@ class RedfishVendorPassthru(base.VendorInterface):
|
||||
"""Verify that the args input are valid."""
|
||||
destination = kwargs.get('Destination')
|
||||
event_types = kwargs.get('EventTypes')
|
||||
context = kwargs.get('Context')
|
||||
protocol = kwargs.get('Protocol')
|
||||
# NOTE(iurygregory): Use defaults values from Redfish in case they
|
||||
# are not present in the args.
|
||||
context = kwargs.get('Context', "")
|
||||
protocol = kwargs.get('Protocol', "Redfish")
|
||||
|
||||
if event_types is not None:
|
||||
event_service = redfish_utils.get_event_service(task.node)
|
||||
@ -147,7 +148,7 @@ class RedfishVendorPassthru(base.VendorInterface):
|
||||
|
||||
def _filter_subscription_fields(self, subscription_json):
|
||||
filter_subscription = {k: v for k, v in subscription_json.items()
|
||||
if k not in SUBSCRIPTION_FIELDS_REMOVE}
|
||||
if k in SUBSCRIPTION_COMMON_FIELDS}
|
||||
return filter_subscription
|
||||
|
||||
@METRICS.timer('RedfishVendorPassthru.create_subscription')
|
||||
@ -196,7 +197,7 @@ class RedfishVendorPassthru(base.VendorInterface):
|
||||
"Required argument: a dictionary of "
|
||||
"{'id': 'subscription_bmc_id'}"))
|
||||
def delete_subscription(self, task, **kwargs):
|
||||
"""Creates a subscription.
|
||||
"""Delete a subscription.
|
||||
|
||||
:param task: A TaskManager object.
|
||||
:param kwargs: The arguments sent with vendor passthru.
|
||||
@ -225,7 +226,7 @@ class RedfishVendorPassthru(base.VendorInterface):
|
||||
'node': task.node.uuid,
|
||||
'error': e})
|
||||
LOG.error(error_msg)
|
||||
raise exception.RedfishError(error=error_msg)
|
||||
raise exception.RedfishError(error=error_msg, code=404)
|
||||
|
||||
@METRICS.timer('RedfishVendorPassthru.get_subscriptions')
|
||||
@base.passthru(['GET'], async_call=False,
|
||||
|
@ -0,0 +1,9 @@
|
||||
---
|
||||
fixes:
|
||||
- |
|
||||
The validation for ``create_subscription`` now uses the default values
|
||||
from Redfish for `Context` and `Protocol` to avoid `None`.
|
||||
The fields returned by ``create_subscription`` and ``get_subscription``
|
||||
are now filtered by the common fields between vendors.
|
||||
Deleting a subscription that doesn't exist will return 404 instead of 500.
|
||||
|
Loading…
Reference in New Issue
Block a user