Adding capability to check NVDIMM_N availability

This commit adds a new capability to check NVDIMM_N
availability using the bios parameter on the ProLiant Servers.

Change-Id: I91206332562bc5929df06806884811af73738304
This commit is contained in:
kesper 2017-04-25 06:43:28 +00:00
parent 641813c18f
commit 86759d886b
3 changed files with 50 additions and 2 deletions

View File

@ -978,6 +978,8 @@ class RISOperations(rest.RestConnectorBase, operations.IloOperations):
capabilities.update(self._get_tpm_capability()) capabilities.update(self._get_tpm_capability())
if self._get_cpu_virtualization(): if self._get_cpu_virtualization():
capabilities['cpu_vt'] = 'true' capabilities['cpu_vt'] = 'true'
if self._get_nvdimm_n_status():
capabilities['nvdimm_n'] = 'true'
try: try:
self.get_secure_boot_mode() self.get_secure_boot_mode()
capabilities['secure_boot'] = 'true' capabilities['secure_boot'] = 'true'
@ -1526,3 +1528,18 @@ class RISOperations(rest.RestConnectorBase, operations.IloOperations):
else: else:
vt_status = False vt_status = False
return vt_status return vt_status
def _get_nvdimm_n_status(self):
"""Get status of NVDIMM_N.
:returns: True if NVDIMM_N is present and enabled, False otherwise.
"""
try:
nvdimm_n_status = self._get_bios_setting('NvDimmNMemFunctionality')
if nvdimm_n_status == 'Enabled':
nvn_status = True
else:
nvn_status = False
except exception.IloCommandNotSupportedError:
nvn_status = False
return nvn_status

View File

@ -1276,6 +1276,7 @@ GET_BIOS_SETTINGS = """
"NmiDebugButton": "Enabled", "NmiDebugButton": "Enabled",
"NodeInterleaving": "Disabled", "NodeInterleaving": "Disabled",
"NumaGroupSizeOpt": "Clustered", "NumaGroupSizeOpt": "Clustered",
"NvDimmNMemFunctionality": "Enabled",
"OldAdminPassword": null, "OldAdminPassword": null,
"OldPowerOnPassword": null, "OldPowerOnPassword": null,
"PciBusPadding": "Enabled", "PciBusPadding": "Enabled",

View File

@ -375,6 +375,7 @@ class IloRisTestCase(testtools.TestCase):
validate_mock.assert_called_once_with(ris_outputs.GET_HEADERS, validate_mock.assert_called_once_with(ris_outputs.GET_HEADERS,
settings_uri) settings_uri)
@mock.patch.object(ris.RISOperations, '_get_nvdimm_n_status')
@mock.patch.object(ris.RISOperations, @mock.patch.object(ris.RISOperations,
'_get_cpu_virtualization') '_get_cpu_virtualization')
@mock.patch.object(ris.RISOperations, '_get_tpm_capability') @mock.patch.object(ris.RISOperations, '_get_tpm_capability')
@ -385,7 +386,7 @@ class IloRisTestCase(testtools.TestCase):
@mock.patch.object(ris.RISOperations, '_get_host_details') @mock.patch.object(ris.RISOperations, '_get_host_details')
def test_get_server_capabilities(self, get_details_mock, ilo_firm_mock, def test_get_server_capabilities(self, get_details_mock, ilo_firm_mock,
secure_mock, gpu_mock, tpm_mock, secure_mock, gpu_mock, tpm_mock,
cpu_vt_mock): cpu_vt_mock, nvdimm_n_mock):
host_details = json.loads(ris_outputs.RESPONSE_BODY_FOR_REST_OP) host_details = json.loads(ris_outputs.RESPONSE_BODY_FOR_REST_OP)
get_details_mock.return_value = host_details get_details_mock.return_value = host_details
ilo_firm_mock.return_value = {'ilo_firmware_version': 'iLO 4 v2.20'} ilo_firm_mock.return_value = {'ilo_firmware_version': 'iLO 4 v2.20'}
@ -393,13 +394,15 @@ class IloRisTestCase(testtools.TestCase):
cpu_vt_mock.return_value = True cpu_vt_mock.return_value = True
secure_mock.return_value = False secure_mock.return_value = False
tpm_mock.return_value = {'trusted_boot': True} tpm_mock.return_value = {'trusted_boot': True}
nvdimm_n_mock.return_value = True
expected_caps = {'secure_boot': 'true', expected_caps = {'secure_boot': 'true',
'ilo_firmware_version': 'iLO 4 v2.20', 'ilo_firmware_version': 'iLO 4 v2.20',
'rom_firmware_version': u'I36 v1.40 (01/28/2015)', 'rom_firmware_version': u'I36 v1.40 (01/28/2015)',
'server_model': u'ProLiant BL460c Gen9', 'server_model': u'ProLiant BL460c Gen9',
'pci_gpu_devices': 2, 'pci_gpu_devices': 2,
'trusted_boot': True, 'trusted_boot': True,
'cpu_vt': 'true'} 'cpu_vt': 'true',
'nvdimm_n': 'true'}
capabilities = self.client.get_server_capabilities() capabilities = self.client.get_server_capabilities()
self.assertEqual(expected_caps, capabilities) self.assertEqual(expected_caps, capabilities)
@ -1820,3 +1823,30 @@ class TestRISOperationsPrivateMethods(testtools.TestCase):
expected_out = {'trusted_boot': False} expected_out = {'trusted_boot': False}
status = self.client._get_tpm_capability() status = self.client._get_tpm_capability()
self.assertEqual(expected_out, status) self.assertEqual(expected_out, status)
@mock.patch.object(ris.RISOperations, '_get_bios_setting')
def test___get_nvdimm_n_status_enabled(self, bios_mock):
bios_settings = json.loads(ris_outputs.GET_BIOS_SETTINGS)
bios_mock.return_value = bios_settings['NvDimmNMemFunctionality']
expected_nvdimm_n_status = True
nvdimm_n_status_return = self.client._get_nvdimm_n_status()
self.assertEqual(nvdimm_n_status_return, expected_nvdimm_n_status)
self.assertTrue(bios_mock.called)
@mock.patch.object(ris.RISOperations, '_get_bios_setting')
def test___get_nvdimm_n_status_disabled(self, bios_mock):
bios_mock.return_value = 'Disabled'
expected_nvdimm_n_status = False
nvdimm_n_status_return = self.client._get_nvdimm_n_status()
self.assertEqual(nvdimm_n_status_return, expected_nvdimm_n_status)
self.assertTrue(bios_mock.called)
@mock.patch.object(ris.RISOperations, '_get_bios_setting')
def test___get_nvdimm_n_status_not_supported_error(self, bios_mock):
msg = ("BIOS Property 'NvDimmNMemFunctionality' is not supported on"
" this system")
bios_mock.side_effect = exception.IloCommandNotSupportedError(msg)
expected_nvdimm_n_status = False
nvdimm_n_status_return = self.client._get_nvdimm_n_status()
self.assertEqual(nvdimm_n_status_return, expected_nvdimm_n_status)
self.assertTrue(bios_mock.called)