# -*- coding: utf-8 -*-
# Copyright (2017) Hewlett Packard Enterprise Development LP
#
# 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.
import collections
from oneview_redfish_toolkit.api.chassis \
import Chassis
import re
[docs]class EnclosureChassis(Chassis):
"""Creates an Enclosure Chassis Redfish dict
Populates self.redfish with some hardcoded Enclosure Chassis
values and with the response of OneView enclosure resources.
"""
def __init__(self, enclosure, environmental_configuration):
"""Enclosure Chassis constructor
Populates self.redfish with hardcoded Enclosure Chassis
values and with the response of OneView enclosure.
Args:
enclosure: An object containing the Oneview enclosure
to create the Redfish JSON.
environmental_configuration: An object having information
about the rack that containing the enclosure.
"""
super().__init__(enclosure)
self.redfish["ChassisType"] = "Enclosure"
self.redfish["Model"] = enclosure["enclosureModel"]
self.redfish["IndicatorLED"] = self. \
_map_indicator_led(enclosure["uidState"])
self.redfish["Links"]["Contains"] = list()
self._set_links_to_computer_system(
enclosure["deviceBays"])
self.redfish["Links"]["ManagedBy"] = list()
self.redfish["Links"]["ManagedBy"].append(collections.OrderedDict())
self.redfish["Links"]["ManagedBy"][0]["@odata.id"] = \
"/redfish/v1/Managers/" + enclosure['uuid']
self.redfish["Links"]["ContainedBy"] = collections.OrderedDict()
self.redfish["Links"]["ContainedBy"]["@odata.id"] = \
"/redfish/v1/Chassis/" + environmental_configuration["rackId"]
self._validate()
def _set_links_to_computer_system(self, oneview_device_bays):
"""Mounts the list of Enclosure Links
Populates self.redfish["Links"]["Contains"] with the links
to all ComputerSystem chassis it contains.
Args:
oneview_device_bays: list of dicts containing information
about devices and URI to OneView server hardware.
"""
computer_systems_uuid = self. \
_filter_by_computer_system_uuid(oneview_device_bays)
for computer_system_uuid in computer_systems_uuid:
link_dict = collections.OrderedDict()
link_dict["@odata.id"] = \
"/redfish/v1/Chassis/" + computer_system_uuid
self.redfish["Links"]["Contains"].append(link_dict)
def _filter_by_computer_system_uuid(self, oneview_device_bays):
"""Return Computer Systems UUID
Iterate over oneview_device_bays and filter by only UUIDs
related to server hardware.
Args:
oneview_device_bays: list of dicts containing information
about devices and URI of OneView server hardware.
Returns:
list: List of ComputerSystem UUID.
"""
pattern = re.compile(r'\b[A-Z0-9]{8}-[A-Z0-9]{4}-[A-Z0-9]{4}-'
r'[A-Z0-9]{4}-[A-Z0-9]{12}\b')
computer_system_uuid = list()
for device_dict in oneview_device_bays:
uri = device_dict["deviceUri"]
if uri is not None:
uuid = uri.split("/")[-1]
if pattern.match(uuid):
computer_system_uuid.append(uuid)
return computer_system_uuid