diff --git a/dracclient/client.py b/dracclient/client.py
index f3ff34f..641063f 100644
--- a/dracclient/client.py
+++ b/dracclient/client.py
@@ -716,6 +716,15 @@ class DRACClient(object):
return self._inventory_mgmt.list_nics()
+ def get_system(self):
+ """Return a Systen object.
+
+ :returns: a System object
+ :raises: WSManRequestFailure on request failures
+ :raises: WSManInvalidResponse when receiving invalid response
+ """
+ return self._inventory_mgmt.get_system()
+
def is_idrac_ready(self):
"""Indicates if the iDRAC is ready to accept commands
diff --git a/dracclient/resources/inventory.py b/dracclient/resources/inventory.py
index 4ce4eae..5fbea88 100644
--- a/dracclient/resources/inventory.py
+++ b/dracclient/resources/inventory.py
@@ -57,6 +57,10 @@ NIC = collections.namedtuple(
'NIC',
['id', 'mac', 'model', 'speed_mbps', 'duplex', 'media_type'])
+System = collections.namedtuple(
+ 'System',
+ ['id', 'lcc_version', 'model', 'service_tag'])
+
class InventoryManagement(object):
@@ -170,3 +174,31 @@ class InventoryManagement(object):
def _get_nic_attr(self, drac_nic, attr_name):
return utils.get_wsman_resource_attr(drac_nic, uris.DCIM_NICView,
attr_name)
+
+ def get_system(self):
+ """Returns a System object
+
+ :returns: a System object
+ :raises: WSManRequestFailure on request failures
+ :raises: WSManInvalidRespons when receiving invalid response
+ """
+ doc = self.client.enumerate(uris.DCIM_SystemView)
+ drac_system = utils.find_xml(doc,
+ 'DCIM_SystemView',
+ uris.DCIM_SystemView,
+ find_all=False)
+
+ return self._parse_drac_system(drac_system)
+
+ def _parse_drac_system(self, drac_system):
+ return System(
+ id=self._get_system_attr(drac_system, 'InstanceID'),
+ service_tag=self._get_system_attr(drac_system, 'ServiceTag'),
+ model=self._get_system_attr(drac_system, 'Model'),
+ lcc_version=self._get_system_attr(drac_system,
+ 'LifecycleControllerVersion'))
+
+ def _get_system_attr(self, drac_system, attr_name):
+ return utils.get_wsman_resource_attr(drac_system,
+ uris.DCIM_SystemView,
+ attr_name)
diff --git a/dracclient/tests/test_inventory.py b/dracclient/tests/test_inventory.py
index 27b116c..8b6fa71 100644
--- a/dracclient/tests/test_inventory.py
+++ b/dracclient/tests/test_inventory.py
@@ -129,3 +129,17 @@ class ClientInventoryManagementTestCase(base.BaseTest):
self.assertEqual(
expected_nics,
self.drac_client.list_nics())
+
+ def test_get_system(self, mock_requests, mock_wait_until_idrac_is_ready):
+ expected_system = inventory.System(
+ id='System.Embedded.1',
+ service_tag='A1B2C3D',
+ model='PowerEdge R630',
+ lcc_version='2.1.0')
+ mock_requests.post(
+ 'https://1.2.3.4:443/wsman',
+ text=test_utils.LifecycleControllerEnumerations[
+ uris.DCIM_SystemView]['ok'])
+ self.assertEqual(
+ expected_system,
+ self.drac_client.get_system())
diff --git a/dracclient/tests/wsman_mocks/system_view-enum-ok.xml b/dracclient/tests/wsman_mocks/system_view-enum-ok.xml
index ad2d5a5..73db373 100644
--- a/dracclient/tests/wsman_mocks/system_view-enum-ok.xml
+++ b/dracclient/tests/wsman_mocks/system_view-enum-ok.xml
@@ -15,9 +15,11 @@
System.Embedded.1
2.1.0
+ PowerEdge R630
+ A1B2C3D
-
\ No newline at end of file
+