Add memory enumeration to InventoryManagement

Change-Id: I0e58122a8d68d927b057aeedd2c127d62d9bae92
This commit is contained in:
Chris Coyle 2016-04-06 15:00:11 -04:00
parent f2cd8bbd8a
commit b87d729dca
7 changed files with 134 additions and 0 deletions

View File

@ -159,6 +159,16 @@ Required parameters:
* ``raid_controller``: id of the RAID controller.
Inventory Management
--------------------
list_cpus
~~~~~~~~~
Returns a list of installed CPUs.
list_memory
~~~~~~~~~~~
Returns a list of installed memory modules.
Job management
--------------

View File

@ -420,6 +420,18 @@ class DRACClient(object):
"""
return self._inventory_mgmt.list_cpus()
def list_memory(self):
"""Returns a list of memory modules
:returns: a list of Memory objects
:raises: WSManRequestFailure on request failures
:raises: WSManInvalidResponse when receiving invalid response
:raises: DRACOperationFailed on error reported back by the DRAC
interface
"""
return self._inventory_mgmt.list_memory()
class WSManClient(wsman.Client):
"""Wrapper for wsman.Client with return value checking"""

View File

@ -21,6 +21,10 @@ CPU = collections.namedtuple(
['id', 'cores', 'speed', 'ht_enabled', 'model', 'status', 'turbo_enabled',
'vt_enabled'])
Memory = collections.namedtuple(
'Memory',
['id', 'size', 'speed', 'manufacturer', 'model', 'status'])
PrimaryStatus = {
'0': 'Unknown',
'1': 'OK',
@ -71,3 +75,35 @@ class InventoryManagement(object):
def _get_cpu_attr(self, cpu, attr_name):
return utils.get_wsman_resource_attr(
cpu, uris.DCIM_CPUView, attr_name)
def list_memory(self):
"""Returns the list of installed memory
:returns: a list of Memory objects
:raises: WSManRequestFailure on request failures
:raises: WSManInvalidResponse when receiving invalid response
:raises: DRACOperationFailed on error reported back by the DRAC
"""
doc = self.client.enumerate(uris.DCIM_MemoryView)
installed_memory = utils.find_xml(doc, 'DCIM_MemoryView',
uris.DCIM_MemoryView,
find_all=True)
return [self._parse_memory(memory) for memory in installed_memory]
def _parse_memory(self, memory):
return Memory(id=self._get_memory_attr(memory, 'FQDD'),
size=int(self._get_memory_attr(memory, 'Size')),
speed=int(self._get_memory_attr(memory, 'Speed')),
manufacturer=self._get_memory_attr(memory,
'Manufacturer'),
model=self._get_memory_attr(memory, 'Model'),
status=PrimaryStatus[self._get_memory_attr(
memory,
'PrimaryStatus')])
def _get_memory_attr(self, memory, attr_name):
return utils.get_wsman_resource_attr(memory, uris.DCIM_MemoryView,
attr_name)

View File

@ -46,6 +46,9 @@ DCIM_CPUView = ('http://schemas.dell.com/wbem/wscim/1/cim-schema/2/'
DCIM_LifecycleJob = ('http://schemas.dell.com/wbem/wscim/1/cim-schema/2/'
'DCIM_LifecycleJob')
DCIM_MemoryView = ('http://schemas.dell.com/wbem/wscim/1/cim-schema/2/'
'DCIM_MemoryView')
DCIM_PhysicalDiskView = ('http://schemas.dell.com/wbem/wscim/1/cim-schema/2/'
'DCIM_PhysicalDiskView')

View File

@ -982,3 +982,30 @@ class ClientCPUTestCase(base.BaseTest):
self.assertEqual(
expected_cpu,
self.drac_client.list_cpus())
@requests_mock.Mocker()
class ClientMemoryestCase(base.BaseTest):
def setUp(self):
super(ClientMemoryestCase, self).setUp()
self.drac_client = dracclient.client.DRACClient(
**test_utils.FAKE_ENDPOINT)
def test_list_memory(self, mock_requests):
expected_memory = [inventory.Memory(
id='DIMM.Socket.A1',
size=16384,
speed=2133,
manufacturer='Samsung',
model='DDR4 DIMM',
status='OK',
)]
mock_requests.post(
'https://1.2.3.4:443/wsman',
text=test_utils.MemoryEnumerations[uris.DCIM_MemoryView]['ok'])
self.assertEqual(
expected_memory,
self.drac_client.list_memory())

View File

@ -133,6 +133,12 @@ LifecycleControllerEnumerations = {
},
}
MemoryEnumerations = {
uris.DCIM_MemoryView: {
'ok': load_wsman_xml('memory-enumeration-enum-ok')
},
}
RAIDEnumerations = {
uris.DCIM_ControllerView: {
'ok': load_wsman_xml('controller_view-enum-ok')

View File

@ -0,0 +1,40 @@
<s:Envelope
xmlns:s="http://www.w3.org/2003/05/soap-envelope"
xmlns:wsa="http://schemas.xmlsoap.org/ws/2004/08/addressing"
xmlns:wsen="http://schemas.xmlsoap.org/ws/2004/09/enumeration"
xmlns:wsman="http://schemas.dmtf.org/wbem/wsman/1/wsman.xsd"
xmlns:n1="http://schemas.dell.com/wbem/wscim/1/cim-schema/2/DCIM_MemoryView">
<s:Header>
<wsa:To>http://schemas.xmlsoap.org/ws/2004/08/addressing/role/anonymous</wsa:To>
<wsa:Action>http://schemas.xmlsoap.org/ws/2004/09/enumeration/EnumerateResponse</wsa:Action>
<wsa:RelatesTo>uuid:6a7e85cd-00a9-49a2-a781-d047063b9975</wsa:RelatesTo>
<wsa:MessageID>uuid:09c85e7c-2fda-1fda-bf81-f148d4fe83b0</wsa:MessageID>
</s:Header>
<s:Body>
<wsen:EnumerateResponse>
<wsman:Items>
<n1:DCIM_MemoryView>
<n1:BankLabel>A</n1:BankLabel>
<n1:CurrentOperatingSpeed>1866</n1:CurrentOperatingSpeed>
<n1:DeviceDescription>DIMM A1</n1:DeviceDescription>
<n1:FQDD>DIMM.Socket.A1</n1:FQDD>
<n1:InstanceID>DIMM.Socket.A1</n1:InstanceID>
<n1:LastSystemInventoryTime>20160215025015.000000+000</n1:LastSystemInventoryTime>
<n1:LastUpdateTime>20151112191452.000000+000</n1:LastUpdateTime>
<n1:ManufactureDate>Mon Sep 22 07:00:00 2014 UTC</n1:ManufactureDate>
<n1:Manufacturer>Samsung</n1:Manufacturer>
<n1:MemoryType>26</n1:MemoryType>
<n1:Model>DDR4 DIMM</n1:Model>
<n1:PartNumber>M393A2G40DB0-CPB</n1:PartNumber>
<n1:PrimaryStatus>1</n1:PrimaryStatus>
<n1:Rank>2</n1:Rank>
<n1:SerialNumber>39406867</n1:SerialNumber>
<n1:Size>16384</n1:Size>
<n1:Speed>2133</n1:Speed>
</n1:DCIM_MemoryView>
</wsman:Items>
<wsen:EnumerationContext/>
<wsman:EndOfSequence/>
</wsen:EnumerateResponse>
</s:Body>
</s:Envelope>