Migrate CompositionService, EventService and TaskService to enums
Change-Id: Icb6e67f90c148f29477a9b373235529fa90983fe
This commit is contained in:
parent
519e54b1e9
commit
6ca3cedeb4
@ -13,19 +13,78 @@
|
||||
# Values come from the Redfish ResourceBlock json-schema.
|
||||
# https://redfish.dmtf.org/schemas/ResourceBlock.v1_3_0.json
|
||||
|
||||
# Composition state related constants
|
||||
COMPOSITION_STATE_COMPOSING = 'Composing'
|
||||
COMPOSITION_STATE_COMPOSED_AND_AVAILABLE = 'ComposedAndAvailable'
|
||||
COMPOSITION_STATE_COMPOSED = 'Composed'
|
||||
COMPOSITION_STATE_UNUSED = 'Unused'
|
||||
COMPOSITION_STATE_FAILED = 'Failed'
|
||||
COMPOSITION_STATE_UNAVAILABLE = 'Unavailable'
|
||||
import enum
|
||||
|
||||
# Resource Block type related constants
|
||||
RESOURCE_BLOCK_TYPE_COMPUTE = 'Compute'
|
||||
RESOURCE_BLOCK_TYPE_PROCESSOR = 'Processor'
|
||||
RESOURCE_BLOCK_TYPE_MEMORY = 'Memory'
|
||||
RESOURCE_BLOCK_TYPE_NETWORK = 'Network'
|
||||
RESOURCE_BLOCK_TYPE_STORAGE = 'Storage'
|
||||
RESOURCE_BLOCK_TYPE_COMPUTERSYSTEM = 'ComputerSystem'
|
||||
RESOURCE_BLOCK_TYPE_EXPANSION = 'Expansion'
|
||||
|
||||
class CompositionState(enum.Enum):
|
||||
COMPOSING = 'Composing'
|
||||
"""Intermediate state indicating composition is in progress."""
|
||||
|
||||
COMPOSED_AND_AVAILABLE = 'ComposedAndAvailable'
|
||||
"""Indicates the Resource Block is currently participating in one or
|
||||
more compositions, and is available to be used in more compositions."""
|
||||
|
||||
COMPOSED = 'Composed'
|
||||
"""Final successful state of a Resource Block which has participated in
|
||||
composition."""
|
||||
|
||||
UNUSED = 'Unused'
|
||||
"""Indicates the Resource Block is free and can participate in
|
||||
composition."""
|
||||
|
||||
FAILED = 'Failed'
|
||||
"""The final composition resulted in failure and manual intervention may
|
||||
be required to fix it."""
|
||||
|
||||
UNAVAILABLE = 'Unavailable'
|
||||
"""Indicates the Resource Block has been made unavailable by the
|
||||
service, such as due to maintenance being performed on the Resource
|
||||
Block."""
|
||||
|
||||
|
||||
# Backward compatibility
|
||||
COMPOSITION_STATE_COMPOSING = CompositionState.COMPOSING
|
||||
COMPOSITION_STATE_COMPOSED_AND_AVAILABLE = \
|
||||
CompositionState.COMPOSED_AND_AVAILABLE
|
||||
COMPOSITION_STATE_COMPOSED = CompositionState.COMPOSED
|
||||
COMPOSITION_STATE_UNUSED = CompositionState.UNUSED
|
||||
COMPOSITION_STATE_FAILED = CompositionState.FAILED
|
||||
COMPOSITION_STATE_UNAVAILABLE = CompositionState.UNAVAILABLE
|
||||
|
||||
|
||||
class ResourceBlockType(enum.Enum):
|
||||
COMPUTE = 'Compute'
|
||||
"""This Resource Block contains both Processor and Memory resources in a
|
||||
manner that creates a compute complex."""
|
||||
|
||||
PROCESSOR = 'Processor'
|
||||
"""This Resource Block contains Processor resources."""
|
||||
|
||||
MEMORY = 'Memory'
|
||||
"""This Resource Block contains Memory resources."""
|
||||
|
||||
NETWORK = 'Network'
|
||||
"""This Resource Block contains Network resources, such as Ethernet
|
||||
Interfaces."""
|
||||
|
||||
STORAGE = 'Storage'
|
||||
"""This Resource Block contains Storage resources, such as Storage and
|
||||
Simple Storage."""
|
||||
|
||||
COMPUTER_SYSTEM = 'ComputerSystem'
|
||||
"""This Resource Block contains ComputerSystem resources."""
|
||||
|
||||
EXPANSION = 'Expansion'
|
||||
"""This Resource Block is capable of changing over time based on its
|
||||
configuration. Different types of devices within this Resource Block
|
||||
can be added and removed over time."""
|
||||
|
||||
|
||||
# Backward compatibility
|
||||
RESOURCE_BLOCK_TYPE_COMPUTE = ResourceBlockType.COMPUTE
|
||||
RESOURCE_BLOCK_TYPE_PROCESSOR = ResourceBlockType.PROCESSOR
|
||||
RESOURCE_BLOCK_TYPE_MEMORY = ResourceBlockType.MEMORY
|
||||
RESOURCE_BLOCK_TYPE_NETWORK = ResourceBlockType.NETWORK
|
||||
RESOURCE_BLOCK_TYPE_STORAGE = ResourceBlockType.STORAGE
|
||||
RESOURCE_BLOCK_TYPE_COMPUTERSYSTEM = ResourceBlockType.COMPUTER_SYSTEM
|
||||
RESOURCE_BLOCK_TYPE_EXPANSION = ResourceBlockType.EXPANSION
|
||||
|
@ -1,40 +0,0 @@
|
||||
# Licensed under the Apache License, Version 2.0 (the "License"); you may
|
||||
# not use this file except in compliance with the License. You may obtain
|
||||
# a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
||||
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
||||
# License for the specific language governing permissions and limitations
|
||||
# under the License.
|
||||
|
||||
from sushy.resources.compositionservice import constants as comp_cons
|
||||
from sushy import utils
|
||||
|
||||
|
||||
COMPOSITION_STATE_VALUE_MAP = {
|
||||
'Composing': comp_cons.COMPOSITION_STATE_COMPOSING,
|
||||
'ComposedAndAvailable': comp_cons.COMPOSITION_STATE_COMPOSED_AND_AVAILABLE,
|
||||
'Composed': comp_cons.COMPOSITION_STATE_COMPOSED,
|
||||
'Unused': comp_cons.COMPOSITION_STATE_UNUSED,
|
||||
'Failed': comp_cons.COMPOSITION_STATE_FAILED,
|
||||
'Unavailable': comp_cons.COMPOSITION_STATE_UNAVAILABLE
|
||||
}
|
||||
|
||||
COMPOSITION_STATE_VALUE_MAP_REV = (
|
||||
utils.revert_dictionary(COMPOSITION_STATE_VALUE_MAP))
|
||||
|
||||
RESOURCE_BLOCK_TYPE_VALUE_MAP = {
|
||||
'Compute': comp_cons.RESOURCE_BLOCK_TYPE_COMPUTE,
|
||||
'Processor': comp_cons.RESOURCE_BLOCK_TYPE_PROCESSOR,
|
||||
'Memory': comp_cons.RESOURCE_BLOCK_TYPE_MEMORY,
|
||||
'Network': comp_cons.RESOURCE_BLOCK_TYPE_NETWORK,
|
||||
'Storage': comp_cons.RESOURCE_BLOCK_TYPE_STORAGE,
|
||||
'ComputerSystem': comp_cons.RESOURCE_BLOCK_TYPE_COMPUTERSYSTEM,
|
||||
'Expansion': comp_cons.RESOURCE_BLOCK_TYPE_EXPANSION
|
||||
}
|
||||
|
||||
RESOURCE_BLOCK_TYPE_VALUE_MAP_REV = (
|
||||
utils.revert_dictionary(RESOURCE_BLOCK_TYPE_VALUE_MAP))
|
@ -18,7 +18,7 @@ import logging
|
||||
|
||||
from sushy.resources import base
|
||||
from sushy.resources import common
|
||||
from sushy.resources.compositionservice import mappings as res_maps
|
||||
from sushy.resources.compositionservice import constants
|
||||
|
||||
LOG = logging.getLogger(__name__)
|
||||
|
||||
@ -27,7 +27,7 @@ class CompositionStatusField(base.CompositeField):
|
||||
|
||||
composition_state = base.MappedField(
|
||||
'CompositionState',
|
||||
res_maps.COMPOSITION_STATE_VALUE_MAP,
|
||||
constants.CompositionState,
|
||||
required=True)
|
||||
"""Inform the client, state of the resource block"""
|
||||
|
||||
@ -67,7 +67,7 @@ class ResourceBlock(base.ResourceBase):
|
||||
|
||||
resource_block_type = base.MappedField(
|
||||
'ResourceBlockType',
|
||||
res_maps.RESOURCE_BLOCK_TYPE_VALUE_MAP,
|
||||
constants.ResourceBlockType,
|
||||
required=True)
|
||||
"""The type of resource block"""
|
||||
|
||||
|
@ -15,24 +15,39 @@
|
||||
# http://redfish.dmtf.org/schemas/v1/Event.json#/definitions/EventType
|
||||
# https://redfish.dmtf.org/schemas/v1/EventService.v1_0_6.json
|
||||
|
||||
EVENT_TYPE_STATUS_CHANGE = "Status Change"
|
||||
"""The status of a resource has changed"""
|
||||
import enum
|
||||
|
||||
EVENT_TYPE_RESOURCE_ADDED = "Resource Added"
|
||||
"""A resource has been added."""
|
||||
|
||||
EVENT_TYPE_RESOURCE_REMOVED = "Resource Removed"
|
||||
"""A resource has been removed"""
|
||||
class EventType(enum.Enum):
|
||||
|
||||
EVENT_TYPE_RESOURCE_UPDATED = "Resource Updated"
|
||||
"""A resource has been updated"""
|
||||
STATUS_CHANGE = 'StatusChange'
|
||||
"""The status of a resource has changed."""
|
||||
|
||||
EVENT_TYPE_ALERT = "Alert"
|
||||
"""A condition requires attention"""
|
||||
RESOURCE_UPDATED = 'ResourceUpdated'
|
||||
"""A resource has been updated."""
|
||||
|
||||
EVENT_TYPE_METRIC_REPORT = "Metric Report"
|
||||
"""The telemetry service is sending a metric report"""
|
||||
RESOURCE_ADDED = 'ResourceAdded'
|
||||
"""A resource has been added."""
|
||||
|
||||
EVENT_TYPE_OTHER = "Other"
|
||||
"""Because EventType is deprecated as of Redfish Specification v1.6,
|
||||
the event is based on a registry or resource but not an EventType."""
|
||||
RESOURCE_REMOVED = 'ResourceRemoved'
|
||||
"""A resource has been removed."""
|
||||
|
||||
ALERT = 'Alert'
|
||||
"""A condition requires attention."""
|
||||
|
||||
METRIC_REPORT = 'MetricReport'
|
||||
"""The telemetry service is sending a metric report."""
|
||||
|
||||
OTHER = 'Other'
|
||||
"""Because EventType is deprecated as of Redfish Specification v1.6, the
|
||||
event is based on a registry or resource but not an EventType."""
|
||||
|
||||
|
||||
# Backward compatibility
|
||||
EVENT_TYPE_STATUS_CHANGE = EventType.STATUS_CHANGE
|
||||
EVENT_TYPE_RESOURCE_UPDATED = EventType.RESOURCE_UPDATED
|
||||
EVENT_TYPE_RESOURCE_ADDED = EventType.RESOURCE_ADDED
|
||||
EVENT_TYPE_RESOURCE_REMOVED = EventType.RESOURCE_REMOVED
|
||||
EVENT_TYPE_ALERT = EventType.ALERT
|
||||
EVENT_TYPE_METRIC_REPORT = EventType.METRIC_REPORT
|
||||
EVENT_TYPE_OTHER = EventType.OTHER
|
||||
|
@ -20,8 +20,8 @@ import logging
|
||||
from sushy import exceptions
|
||||
from sushy.resources import base
|
||||
from sushy.resources import common
|
||||
from sushy.resources.eventservice import constants
|
||||
from sushy.resources.eventservice import eventdestination
|
||||
from sushy.resources.eventservice import mappings as evs_maps
|
||||
|
||||
LOG = logging.getLogger(__name__)
|
||||
|
||||
@ -130,11 +130,10 @@ class EventService(base.ResourceBase):
|
||||
if not self.event_types_for_subscription:
|
||||
LOG.warning('Could not figure out the Event types supported by '
|
||||
'the EventService %s', self.identity)
|
||||
return set(evs_maps.EVENT_TYPE_VALUE_MAP.values())
|
||||
return set(constants.EventType)
|
||||
|
||||
return set([evs_maps.EVENT_TYPE_VALUE_MAP[v] for v in
|
||||
set(evs_maps.EVENT_TYPE_VALUE_MAP).
|
||||
intersection(self.event_types_for_subscription)])
|
||||
return {v for v in constants.EventType
|
||||
if v.value in self.event_types_for_subscription}
|
||||
|
||||
def _get_subscriptions_collection_path(self):
|
||||
"""Helper function to find the EventDestinationCollections path"""
|
||||
|
@ -1,24 +0,0 @@
|
||||
# Licensed under the Apache License, Version 2.0 (the "License"); you may
|
||||
# not use this file except in compliance with the License. You may obtain
|
||||
# a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
||||
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
||||
# License for the specific language governing permissions and limitations
|
||||
# under the License.
|
||||
|
||||
from sushy.resources.eventservice import constants as evt_cons
|
||||
|
||||
|
||||
EVENT_TYPE_VALUE_MAP = {
|
||||
'StatusChange': evt_cons.EVENT_TYPE_STATUS_CHANGE,
|
||||
'ResourceAdded': evt_cons.EVENT_TYPE_RESOURCE_ADDED,
|
||||
'ResourceRemoved': evt_cons.EVENT_TYPE_RESOURCE_REMOVED,
|
||||
'ResourceUpdated': evt_cons.EVENT_TYPE_RESOURCE_UPDATED,
|
||||
'Alert': evt_cons.EVENT_TYPE_ALERT,
|
||||
'MetricReport': evt_cons.EVENT_TYPE_METRIC_REPORT,
|
||||
'Other': evt_cons.EVENT_TYPE_OTHER
|
||||
}
|
@ -35,7 +35,16 @@ class TaskState(enum.Enum):
|
||||
KILLED = 'Killed'
|
||||
|
||||
|
||||
# Overwrite Policy constants
|
||||
class OverWritePolicy(enum.Enum):
|
||||
"""Overwrite Policy constants"""
|
||||
|
||||
OVERWRITE_POLICY_OLDEST = 'oldest completed'
|
||||
OVERWRITE_POLICY_MANUAL = 'manual only'
|
||||
MANUAL = 'Manual'
|
||||
"""Completed tasks are not automatically overwritten."""
|
||||
|
||||
OLDEST = 'Oldest'
|
||||
"""Oldest completed tasks are overwritten."""
|
||||
|
||||
|
||||
# Backward compatibility
|
||||
OVERWRITE_POLICY_MANUAL = OverWritePolicy.MANUAL
|
||||
OVERWRITE_POLICY_OLDEST = OverWritePolicy.OLDEST
|
||||
|
@ -1,25 +0,0 @@
|
||||
# Copyright (c) 2020 Dell, Inc. or its subsidiaries
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||
# you may not use this file except in compliance with the License.
|
||||
# You may obtain a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
|
||||
# implied.
|
||||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
|
||||
from sushy.resources.taskservice import constants as ts_cons
|
||||
from sushy import utils
|
||||
|
||||
OVERWRITE_POLICY_VALUE_MAP = {
|
||||
'Oldest': ts_cons.OVERWRITE_POLICY_OLDEST,
|
||||
'Manual': ts_cons.OVERWRITE_POLICY_MANUAL,
|
||||
}
|
||||
|
||||
OVERWRITE_POLICY_VALUE_MAP_REV = (
|
||||
utils.revert_dictionary(OVERWRITE_POLICY_VALUE_MAP))
|
@ -18,7 +18,7 @@ import logging
|
||||
|
||||
from sushy.resources import base
|
||||
from sushy.resources import common
|
||||
from sushy.resources.taskservice import mappings as ts_maps
|
||||
from sushy.resources.taskservice import constants as ts_cons
|
||||
from sushy.resources.taskservice import task
|
||||
from sushy import utils
|
||||
|
||||
@ -40,7 +40,7 @@ class TaskService(base.ResourceBase):
|
||||
"""The status of the task service"""
|
||||
|
||||
overwrite_policy = base.MappedField(
|
||||
'CompletedTaskOverWritePolicy', ts_maps.OVERWRITE_POLICY_VALUE_MAP)
|
||||
'CompletedTaskOverWritePolicy', ts_cons.OverWritePolicy)
|
||||
"""The overwrite policy for completed tasks"""
|
||||
|
||||
event_on_task_state_change = base.Field(
|
||||
|
@ -39,7 +39,7 @@ class ResourceBlockTestCase(base.TestCase):
|
||||
def test__parse_attributes(self):
|
||||
self.res_block._parse_attributes(self.json_doc)
|
||||
self.assertEqual(
|
||||
res_block_cons.COMPOSITION_STATE_COMPOSED,
|
||||
res_block_cons.CompositionState.COMPOSED,
|
||||
self.res_block.composition_status.composition_state)
|
||||
self.assertEqual(1, self.res_block.composition_status.max_compositions)
|
||||
self.assertEqual(
|
||||
@ -51,7 +51,7 @@ class ResourceBlockTestCase(base.TestCase):
|
||||
self.assertEqual('DriveBlock3', self.res_block.identity)
|
||||
self.assertEqual('Drive Block 3', self.res_block.name)
|
||||
self.assertEqual(
|
||||
res_block_cons.RESOURCE_BLOCK_TYPE_STORAGE,
|
||||
res_block_cons.ResourceBlockType.STORAGE,
|
||||
self.res_block.resource_block_type)
|
||||
self.assertEqual(
|
||||
res_cons.State.ENABLED,
|
||||
|
@ -51,24 +51,24 @@ class EventServiceTestCase(base.TestCase):
|
||||
'/redfish/v1/EventService/Subscriptions/')
|
||||
|
||||
def test__get_event_types_for_subscription(self):
|
||||
expected = set([sushy.EVENT_TYPE_STATUS_CHANGE,
|
||||
sushy.EVENT_TYPE_RESOURCE_ADDED,
|
||||
sushy.EVENT_TYPE_RESOURCE_REMOVED,
|
||||
sushy.EVENT_TYPE_RESOURCE_UPDATED,
|
||||
sushy.EVENT_TYPE_ALERT])
|
||||
expected = set([sushy.EventType.STATUS_CHANGE,
|
||||
sushy.EventType.RESOURCE_ADDED,
|
||||
sushy.EventType.RESOURCE_REMOVED,
|
||||
sushy.EventType.RESOURCE_UPDATED,
|
||||
sushy.EventType.ALERT])
|
||||
|
||||
values = self.eventservice.get_event_types_for_subscription()
|
||||
self.assertEqual(expected, values)
|
||||
self.assertIsInstance(values, set)
|
||||
|
||||
def test__no_event_types_for_subscription(self):
|
||||
expected = set([sushy.EVENT_TYPE_STATUS_CHANGE,
|
||||
sushy.EVENT_TYPE_RESOURCE_ADDED,
|
||||
sushy.EVENT_TYPE_RESOURCE_REMOVED,
|
||||
sushy.EVENT_TYPE_RESOURCE_UPDATED,
|
||||
sushy.EVENT_TYPE_ALERT,
|
||||
sushy.EVENT_TYPE_METRIC_REPORT,
|
||||
sushy.EVENT_TYPE_OTHER])
|
||||
expected = set([sushy.EventType.STATUS_CHANGE,
|
||||
sushy.EventType.RESOURCE_ADDED,
|
||||
sushy.EventType.RESOURCE_REMOVED,
|
||||
sushy.EventType.RESOURCE_UPDATED,
|
||||
sushy.EventType.ALERT,
|
||||
sushy.EventType.METRIC_REPORT,
|
||||
sushy.EventType.OTHER])
|
||||
self.eventservice.event_types_for_subscription = []
|
||||
|
||||
values = self.eventservice.get_event_types_for_subscription()
|
||||
|
@ -43,7 +43,7 @@ class TaskServiceTestCase(base.TestCase):
|
||||
self.assertEqual(res_cons.State.ENABLED, self.tsk_serv.status.state)
|
||||
self.assertEqual(res_cons.Health.OK, self.tsk_serv.status.health)
|
||||
self.assertEqual(self.tsk_serv.overwrite_policy,
|
||||
ts_cons.OVERWRITE_POLICY_MANUAL)
|
||||
ts_cons.OverWritePolicy.MANUAL)
|
||||
|
||||
@mock.patch.object(task, 'TaskCollection', autospec=True)
|
||||
def test_tasks(self, task_collection_mock):
|
||||
|
Loading…
Reference in New Issue
Block a user