Add support for BIOS configuration
Change-Id: I574696e460f08cececc47a69b5c2b090a6cd44a2
This commit is contained in:
parent
31711e9444
commit
da78c87db2
@ -49,6 +49,7 @@ class DRACClient(object):
|
||||
self._job_mgmt = job.JobManagement(self.client)
|
||||
self._power_mgmt = bios.PowerManagement(self.client)
|
||||
self._boot_mgmt = bios.BootManagement(self.client)
|
||||
self._bios_cfg = bios.BIOSConfiguration(self.client)
|
||||
|
||||
def get_power_state(self):
|
||||
"""Returns the current power state of the node
|
||||
@ -116,6 +117,41 @@ class DRACClient(object):
|
||||
return self._boot_mgmt.change_boot_device_order(boot_mode,
|
||||
boot_device_list)
|
||||
|
||||
def list_bios_settings(self):
|
||||
"""List the BIOS configuration settings
|
||||
|
||||
:returns: a dictionary with the BIOS settings using its name as the
|
||||
key. The attributes are either BIOSEnumerableAttribute,
|
||||
BIOSStringAttribute or BIOSIntegerAttribute objects.
|
||||
:raises: WSManRequestFailure on request failures
|
||||
:raises: WSManInvalidResponse when receiving invalid response
|
||||
:raises: DRACOperationFailed on error reported back by the DRAC
|
||||
interface
|
||||
"""
|
||||
return self._bios_cfg.list_bios_settings()
|
||||
|
||||
def set_bios_settings(self, settings):
|
||||
"""Sets the BIOS configuration
|
||||
|
||||
To be more precise, it sets the pending_value parameter for each of the
|
||||
attributes passed in. For the values to be applied, a config job must
|
||||
be created and the node must be rebooted.
|
||||
|
||||
:param: settings: a dictionary containing the proposed values, with
|
||||
each key being the name of attribute and the
|
||||
value being the proposed value.
|
||||
:returns: a dictionary containing the commit_needed key with a boolean
|
||||
value indicating whether a config job must be created for the
|
||||
values to be applied.
|
||||
:raises: WSManRequestFailure on request failures
|
||||
:raises: WSManInvalidResponse when receiving invalid response
|
||||
:raises: DRACOperationFailed on error reported back by the DRAC
|
||||
interface
|
||||
:raises: DRACUnexpectedReturnValue on return value mismatch
|
||||
:raises: InvalidParameterValue on invalid BIOS attribute
|
||||
"""
|
||||
return self._bios_cfg.set_bios_settings(settings)
|
||||
|
||||
def list_jobs(self, only_unfinished=False):
|
||||
"""Returns a list of jobs from the job queue
|
||||
|
||||
@ -208,9 +244,11 @@ class DRACClient(object):
|
||||
resource_uri, cim_creation_class_name, cim_name, target,
|
||||
cim_system_creation_class_name, cim_system_name)
|
||||
|
||||
def commit_pending_bios_changes(self):
|
||||
def commit_pending_bios_changes(self, reboot=False):
|
||||
"""Applies all pending changes on the BIOS by creating a config job
|
||||
|
||||
:param: reboot: indicates whether a RebootJob should be also be
|
||||
created or not
|
||||
:returns: id of the created job
|
||||
:raises: WSManRequestFailure on request failures
|
||||
:raises: WSManInvalidResponse when receiving invalid response
|
||||
@ -221,7 +259,8 @@ class DRACClient(object):
|
||||
return self._job_mgmt.create_config_job(
|
||||
resource_uri=uris.DCIM_BIOSService,
|
||||
cim_creation_class_name='DCIM_BIOSService',
|
||||
cim_name='DCIM:BIOSService', target=self.BIOS_DEVICE_FQDD)
|
||||
cim_name='DCIM:BIOSService', target=self.BIOS_DEVICE_FQDD,
|
||||
reboot=reboot)
|
||||
|
||||
def abandon_pending_bios_changes(self):
|
||||
"""Deletes all pending changes on the BIOS
|
||||
|
@ -12,12 +12,17 @@
|
||||
# under the License.
|
||||
|
||||
import collections
|
||||
import logging
|
||||
import re
|
||||
|
||||
from dracclient import constants
|
||||
from dracclient import exceptions
|
||||
from dracclient.resources import lifecycle_controller
|
||||
from dracclient.resources import uris
|
||||
from dracclient import utils
|
||||
from dracclient import wsman
|
||||
|
||||
LOG = logging.getLogger(__name__)
|
||||
|
||||
POWER_STATES = {
|
||||
'2': constants.POWER_ON,
|
||||
@ -43,11 +48,10 @@ LC_CONTROLLER_VERSION_12G = (2, 0, 0)
|
||||
BootMode = collections.namedtuple('BootMode', ['id', 'name', 'is_current',
|
||||
'is_next'])
|
||||
|
||||
BootDevice = collections.namedtuple('BootDevice',
|
||||
['id', 'boot_mode',
|
||||
'current_assigned_sequence',
|
||||
'pending_assigned_sequence',
|
||||
'bios_boot_string'])
|
||||
BootDevice = collections.namedtuple(
|
||||
'BootDevice',
|
||||
['id', 'boot_mode', 'current_assigned_sequence',
|
||||
'pending_assigned_sequence', 'bios_boot_string'])
|
||||
|
||||
|
||||
class PowerManagement(object):
|
||||
@ -252,3 +256,329 @@ class BootManagement(object):
|
||||
return utils.get_wsman_resource_attr(drac_boot_device,
|
||||
uris.DCIM_BootSourceSetting,
|
||||
attr_name)
|
||||
|
||||
|
||||
class BIOSAttribute(object):
|
||||
"""Generic BIOS attribute class"""
|
||||
|
||||
def __init__(self, name, current_value, pending_value, read_only):
|
||||
"""Creates BIOSAttribute object
|
||||
|
||||
:param name: name of the BIOS attribute
|
||||
:param current_value: current value of the BIOS attribute
|
||||
:param pending_value: pending value of the BIOS attribute, reflecting
|
||||
an unprocessed change (eg. config job not completed)
|
||||
:param read_only: indicates whether this BIOS attribute can be changed
|
||||
"""
|
||||
self.name = name
|
||||
self.current_value = current_value
|
||||
self.pending_value = pending_value
|
||||
self.read_only = read_only
|
||||
|
||||
def __eq__(self, other):
|
||||
return self.__dict__ == other.__dict__
|
||||
|
||||
@classmethod
|
||||
def parse(cls, namespace, bios_attr_xml):
|
||||
"""Parses XML and creates BIOSAttribute object"""
|
||||
|
||||
name = utils.get_wsman_resource_attr(
|
||||
bios_attr_xml, namespace, 'AttributeName')
|
||||
current_value = utils.get_wsman_resource_attr(
|
||||
bios_attr_xml, namespace, 'CurrentValue', nullable=True)
|
||||
pending_value = utils.get_wsman_resource_attr(
|
||||
bios_attr_xml, namespace, 'PendingValue', nullable=True)
|
||||
read_only = utils.get_wsman_resource_attr(
|
||||
bios_attr_xml, namespace, 'IsReadOnly')
|
||||
|
||||
return cls(name, current_value, pending_value, (read_only == 'true'))
|
||||
|
||||
|
||||
class BIOSEnumerableAttribute(BIOSAttribute):
|
||||
"""Enumerable BIOS attribute class"""
|
||||
|
||||
namespace = uris.DCIM_BIOSEnumeration
|
||||
|
||||
def __init__(self, name, current_value, pending_value, read_only,
|
||||
possible_values):
|
||||
"""Creates BIOSEnumerableAttribute object
|
||||
|
||||
:param name: name of the BIOS attribute
|
||||
:param current_value: current value of the BIOS attribute
|
||||
:param pending_value: pending value of the BIOS attribute, reflecting
|
||||
an unprocessed change (eg. config job not completed)
|
||||
:param read_only: indicates whether this BIOS attribute can be changed
|
||||
:param possible_values: list containing the allowed values for the BIOS
|
||||
attribute
|
||||
"""
|
||||
super(BIOSEnumerableAttribute, self).__init__(name, current_value,
|
||||
pending_value, read_only)
|
||||
self.possible_values = possible_values
|
||||
|
||||
@classmethod
|
||||
def parse(cls, bios_attr_xml):
|
||||
"""Parses XML and creates BIOSEnumerableAttribute object"""
|
||||
|
||||
bios_attr = BIOSAttribute.parse(cls.namespace, bios_attr_xml)
|
||||
possible_values = [attr.text for attr
|
||||
in utils.find_xml(bios_attr_xml, 'PossibleValues',
|
||||
cls.namespace, find_all=True)]
|
||||
|
||||
return cls(bios_attr.name, bios_attr.current_value,
|
||||
bios_attr.pending_value, bios_attr.read_only,
|
||||
possible_values)
|
||||
|
||||
def validate(self, new_value):
|
||||
"""Validates new value"""
|
||||
|
||||
if str(new_value) not in self.possible_values:
|
||||
msg = ("Attribute '%(attr)s' cannot be set to value '%(val)s'."
|
||||
" It must be in %(possible_values)r.") % {
|
||||
'attr': self.name,
|
||||
'val': new_value,
|
||||
'possible_values': self.possible_values}
|
||||
return msg
|
||||
|
||||
|
||||
class BIOSStringAttribute(BIOSAttribute):
|
||||
"""String BIOS attribute class"""
|
||||
|
||||
namespace = uris.DCIM_BIOSString
|
||||
|
||||
def __init__(self, name, current_value, pending_value, read_only,
|
||||
min_length, max_length, pcre_regex):
|
||||
"""Creates BIOSStringAttribute object
|
||||
|
||||
:param name: name of the BIOS attribute
|
||||
:param current_value: current value of the BIOS attribute
|
||||
:param pending_value: pending value of the BIOS attribute, reflecting
|
||||
an unprocessed change (eg. config job not completed)
|
||||
:param read_only: indicates whether this BIOS attribute can be changed
|
||||
:param min_length: minimum length of the string
|
||||
:param max_length: maximum length of the string
|
||||
:param pcre_regex: is a PCRE compatible regular expression that the
|
||||
string must match
|
||||
"""
|
||||
super(BIOSStringAttribute, self).__init__(name, current_value,
|
||||
pending_value, read_only)
|
||||
self.min_length = min_length
|
||||
self.max_length = max_length
|
||||
self.pcre_regex = pcre_regex
|
||||
|
||||
@classmethod
|
||||
def parse(cls, bios_attr_xml):
|
||||
"""Parses XML and creates BIOSStringAttribute object"""
|
||||
|
||||
bios_attr = BIOSAttribute.parse(cls.namespace, bios_attr_xml)
|
||||
min_length = int(utils.get_wsman_resource_attr(
|
||||
bios_attr_xml, cls.namespace, 'MinLength'))
|
||||
max_length = int(utils.get_wsman_resource_attr(
|
||||
bios_attr_xml, cls.namespace, 'MaxLength'))
|
||||
pcre_regex = utils.get_wsman_resource_attr(
|
||||
bios_attr_xml, cls.namespace, 'ValueExpression', nullable=True)
|
||||
|
||||
return cls(bios_attr.name, bios_attr.current_value,
|
||||
bios_attr.pending_value, bios_attr.read_only,
|
||||
min_length, max_length, pcre_regex)
|
||||
|
||||
def validate(self, new_value):
|
||||
"""Validates new value"""
|
||||
|
||||
if self.pcre_regex is not None:
|
||||
regex = re.compile(self.pcre_regex)
|
||||
if regex.search(str(new_value)) is None:
|
||||
msg = ("Attribute '%(attr)s' cannot be set to value '%(val)s.'"
|
||||
" It must match regex '%(re)s'.") % {
|
||||
'attr': self.name,
|
||||
'val': new_value,
|
||||
're': self.pcre_regex}
|
||||
return msg
|
||||
|
||||
|
||||
class BIOSIntegerAttribute(BIOSAttribute):
|
||||
"""Integer BIOS attribute class"""
|
||||
|
||||
namespace = uris.DCIM_BIOSInteger
|
||||
|
||||
def __init__(self, name, current_value, pending_value, read_only,
|
||||
lower_bound, upper_bound):
|
||||
"""Creates BIOSIntegerAttribute object
|
||||
|
||||
:param name: name of the BIOS attribute
|
||||
:param current_value: current value of the BIOS attribute
|
||||
:param pending_value: pending value of the BIOS attribute, reflecting
|
||||
an unprocessed change (eg. config job not completed)
|
||||
:param read_only: indicates whether this BIOS attribute can be changed
|
||||
:param lower_bound: minimum value for the BIOS attribute
|
||||
:param upper_bound: maximum value for the BOIS attribute
|
||||
"""
|
||||
super(BIOSIntegerAttribute, self).__init__(name, current_value,
|
||||
pending_value, read_only)
|
||||
self.lower_bound = lower_bound
|
||||
self.upper_bound = upper_bound
|
||||
|
||||
@classmethod
|
||||
def parse(cls, bios_attr_xml):
|
||||
"""Parses XML and creates BIOSIntegerAttribute object"""
|
||||
|
||||
bios_attr = BIOSAttribute.parse(cls.namespace, bios_attr_xml)
|
||||
lower_bound = utils.get_wsman_resource_attr(
|
||||
bios_attr_xml, cls.namespace, 'LowerBound')
|
||||
upper_bound = utils.get_wsman_resource_attr(
|
||||
bios_attr_xml, cls.namespace, 'UpperBound')
|
||||
|
||||
if bios_attr.current_value:
|
||||
bios_attr.current_value = int(bios_attr.current_value)
|
||||
if bios_attr.pending_value:
|
||||
bios_attr.pending_value = int(bios_attr.pending_value)
|
||||
|
||||
return cls(bios_attr.name, bios_attr.current_value,
|
||||
bios_attr.pending_value, bios_attr.read_only,
|
||||
int(lower_bound), int(upper_bound))
|
||||
|
||||
def validate(self, new_value):
|
||||
"""Validates new value"""
|
||||
|
||||
val = int(new_value)
|
||||
if val < self.lower_bound or val > self.upper_bound:
|
||||
msg = ('Attribute %(attr)s cannot be set to value %(val)d.'
|
||||
' It must be between %(lower)d and %(upper)d.') % {
|
||||
'attr': self.name,
|
||||
'val': new_value,
|
||||
'lower': self.lower_bound,
|
||||
'upper': self.upper_bound}
|
||||
return msg
|
||||
|
||||
|
||||
class BIOSConfiguration(object):
|
||||
|
||||
def __init__(self, client):
|
||||
"""Creates BIOSConfiguration object
|
||||
|
||||
:param client: an instance of WSManClient
|
||||
"""
|
||||
self.client = client
|
||||
|
||||
def list_bios_settings(self):
|
||||
"""List the BIOS configuration settings
|
||||
|
||||
:returns: a dictionary with the BIOS settings using its name as the
|
||||
key. The attributes are either BIOSEnumerableAttribute,
|
||||
BIOSStringAttribute or BIOSIntegerAttribute objects.
|
||||
:raises: WSManRequestFailure on request failures
|
||||
:raises: WSManInvalidResponse when receiving invalid response
|
||||
:raises: DRACOperationFailed on error reported back by the DRAC
|
||||
interface
|
||||
"""
|
||||
|
||||
result = {}
|
||||
namespaces = [(uris.DCIM_BIOSEnumeration, BIOSEnumerableAttribute),
|
||||
(uris.DCIM_BIOSString, BIOSStringAttribute),
|
||||
(uris.DCIM_BIOSInteger, BIOSIntegerAttribute)]
|
||||
for (namespace, attr_cls) in namespaces:
|
||||
attribs = self._get_config(namespace, attr_cls)
|
||||
if not set(result).isdisjoint(set(attribs)):
|
||||
raise exceptions.DRACOperationFailed(
|
||||
drac_messages=('Colliding attributes %r' % (
|
||||
set(result) & set(attribs))))
|
||||
result.update(attribs)
|
||||
return result
|
||||
|
||||
def _get_config(self, resource, attr_cls):
|
||||
result = {}
|
||||
|
||||
doc = self.client.enumerate(resource)
|
||||
items = doc.find('.//{%s}Items' % wsman.NS_WSMAN)
|
||||
|
||||
for item in items:
|
||||
attribute = attr_cls.parse(item)
|
||||
result[attribute.name] = attribute
|
||||
|
||||
return result
|
||||
|
||||
def set_bios_settings(self, new_settings):
|
||||
"""Sets the BIOS configuration
|
||||
|
||||
To be more precise, it sets the pending_value parameter for each of the
|
||||
attributes passed in. For the values to be applied, a config job must
|
||||
be created and the node must be rebooted.
|
||||
|
||||
:param: new_settings: a dictionary containing the proposed values, with
|
||||
each key being the name of attribute and the
|
||||
value being the proposed value.
|
||||
:returns: a dictionary containing the commit_needed key with a boolean
|
||||
value indicating whether a config job must be created for the
|
||||
values to be applied.
|
||||
:raises: WSManRequestFailure on request failures
|
||||
:raises: WSManInvalidResponse when receiving invalid response
|
||||
:raises: DRACOperationFailed on error reported back by the DRAC
|
||||
interface
|
||||
:raises: DRACUnexpectedReturnValue on return value mismatch
|
||||
:raises: InvalidParameterValue on invalid BIOS attribute
|
||||
"""
|
||||
|
||||
current_settings = self.list_bios_settings()
|
||||
unknown_keys = set(new_settings) - set(current_settings)
|
||||
if unknown_keys:
|
||||
msg = ('Unknown BIOS attributes found: %(unknown_keys)r' %
|
||||
{'unknown_keys': unknown_keys})
|
||||
raise exceptions.InvalidParameterValue(reason=msg)
|
||||
|
||||
read_only_keys = []
|
||||
unchanged_attribs = []
|
||||
invalid_attribs_msgs = []
|
||||
attrib_names = []
|
||||
candidates = set(new_settings)
|
||||
|
||||
for attr in candidates:
|
||||
if str(new_settings[attr]) == str(
|
||||
current_settings[attr].current_value):
|
||||
unchanged_attribs.append(attr)
|
||||
elif current_settings[attr].read_only:
|
||||
read_only_keys.append(attr)
|
||||
else:
|
||||
validation_msg = current_settings[attr].validate(
|
||||
new_settings[attr])
|
||||
if validation_msg is None:
|
||||
attrib_names.append(attr)
|
||||
else:
|
||||
invalid_attribs_msgs.append(validation_msg)
|
||||
|
||||
if unchanged_attribs:
|
||||
LOG.warn('Ignoring unchanged BIOS attributes: %r' %
|
||||
unchanged_attribs)
|
||||
|
||||
if invalid_attribs_msgs or read_only_keys:
|
||||
if read_only_keys:
|
||||
read_only_msg = ['Cannot set read-only BIOS attributes: %r.'
|
||||
% read_only_keys]
|
||||
else:
|
||||
read_only_msg = []
|
||||
|
||||
drac_messages = '\n'.join(invalid_attribs_msgs + read_only_msg)
|
||||
raise exceptions.DRACOperationFailed(
|
||||
drac_messages=drac_messages)
|
||||
|
||||
if not attrib_names:
|
||||
return {'commit_required': False}
|
||||
|
||||
selectors = {'CreationClassName': 'DCIM_BIOSService',
|
||||
'Name': 'DCIM:BIOSService',
|
||||
'SystemCreationClassName': 'DCIM_ComputerSystem',
|
||||
'SystemName': 'DCIM:ComputerSystem'}
|
||||
properties = {'Target': 'BIOS.Setup.1-1',
|
||||
'AttributeName': attrib_names,
|
||||
'AttributeValue': [new_settings[attr] for attr
|
||||
in attrib_names]}
|
||||
doc = self.client.invoke(uris.DCIM_BIOSService, 'SetAttributes',
|
||||
selectors, properties)
|
||||
|
||||
# Checking for RebootRequired attribute in the response, which
|
||||
# indicates whether we need to create a config job and then reboot, so
|
||||
# that the Lifecycle controller can commit the BIOS config changes that
|
||||
# have been proposed.
|
||||
reboot_required = utils.find_xml(doc, 'RebootRequired',
|
||||
uris.DCIM_BIOSService)
|
||||
commit_required = (reboot_required.text == 'Yes')
|
||||
|
||||
return {'commit_required': commit_required}
|
||||
|
@ -11,6 +11,8 @@
|
||||
# License for the specific language governing permissions and limitations
|
||||
# under the License.
|
||||
|
||||
import re
|
||||
|
||||
import lxml.etree
|
||||
import mock
|
||||
import requests_mock
|
||||
@ -189,6 +191,210 @@ class ClientBootManagementTestCase(base.BaseTest):
|
||||
self.drac_client.change_boot_device_order, 'IPL', 'foo')
|
||||
|
||||
|
||||
class ClientBIOSConfigurationTestCase(base.BaseTest):
|
||||
|
||||
def setUp(self):
|
||||
super(ClientBIOSConfigurationTestCase, self).setUp()
|
||||
self.drac_client = dracclient.client.DRACClient(
|
||||
**test_utils.FAKE_ENDPOINT)
|
||||
|
||||
@requests_mock.Mocker()
|
||||
def test_list_bios_settings(self, mock_requests):
|
||||
expected_enum_attr = bios.BIOSEnumerableAttribute(
|
||||
name='MemTest',
|
||||
read_only=False,
|
||||
current_value='Disabled',
|
||||
pending_value=None,
|
||||
possible_values=['Enabled', 'Disabled'])
|
||||
expected_string_attr = bios.BIOSStringAttribute(
|
||||
name='SystemModelName',
|
||||
read_only=True,
|
||||
current_value='PowerEdge R320',
|
||||
pending_value=None,
|
||||
min_length=0,
|
||||
max_length=32,
|
||||
pcre_regex=None)
|
||||
expected_integer_attr = bios.BIOSIntegerAttribute(
|
||||
name='Proc1NumCores',
|
||||
read_only=True,
|
||||
current_value=8,
|
||||
pending_value=None,
|
||||
lower_bound=0,
|
||||
upper_bound=65535)
|
||||
mock_requests.post('https://1.2.3.4:443/wsman', [
|
||||
{'text': test_utils.BIOSEnumerations[
|
||||
uris.DCIM_BIOSEnumeration]['ok']},
|
||||
{'text': test_utils.BIOSEnumerations[
|
||||
uris.DCIM_BIOSString]['ok']},
|
||||
{'text': test_utils.BIOSEnumerations[
|
||||
uris.DCIM_BIOSInteger]['ok']}])
|
||||
|
||||
bios_settings = self.drac_client.list_bios_settings()
|
||||
|
||||
self.assertEqual(103, len(bios_settings))
|
||||
# enumerable attribute
|
||||
self.assertIn('MemTest', bios_settings)
|
||||
self.assertEqual(expected_enum_attr, bios_settings['MemTest'])
|
||||
# string attribute
|
||||
self.assertIn('SystemModelName', bios_settings)
|
||||
self.assertEqual(expected_string_attr,
|
||||
bios_settings['SystemModelName'])
|
||||
# integer attribute
|
||||
self.assertIn('Proc1NumCores', bios_settings)
|
||||
self.assertEqual(expected_integer_attr, bios_settings['Proc1NumCores'])
|
||||
|
||||
@requests_mock.Mocker()
|
||||
def test_list_bios_settings_with_colliding_attrs(self, mock_requests):
|
||||
mock_requests.post('https://1.2.3.4:443/wsman', [
|
||||
{'text': test_utils.BIOSEnumerations[
|
||||
uris.DCIM_BIOSEnumeration]['ok']},
|
||||
{'text': test_utils.BIOSEnumerations[
|
||||
uris.DCIM_BIOSString]['colliding']},
|
||||
{'text': test_utils.BIOSEnumerations[
|
||||
uris.DCIM_BIOSInteger]['ok']}])
|
||||
|
||||
self.assertRaises(exceptions.DRACOperationFailed,
|
||||
self.drac_client.list_bios_settings)
|
||||
|
||||
@requests_mock.Mocker()
|
||||
@mock.patch.object(dracclient.client.WSManClient, 'invoke',
|
||||
spec_set=True, autospec=True)
|
||||
def test_set_bios_settings(self, mock_requests, mock_invoke):
|
||||
expected_selectors = {'CreationClassName': 'DCIM_BIOSService',
|
||||
'SystemName': 'DCIM:ComputerSystem',
|
||||
'Name': 'DCIM:BIOSService',
|
||||
'SystemCreationClassName': 'DCIM_ComputerSystem'}
|
||||
expected_properties = {'Target': 'BIOS.Setup.1-1',
|
||||
'AttributeName': ['ProcVirtualization'],
|
||||
'AttributeValue': ['Disabled']}
|
||||
mock_requests.post('https://1.2.3.4:443/wsman', [
|
||||
{'text': test_utils.BIOSEnumerations[
|
||||
uris.DCIM_BIOSEnumeration]['ok']},
|
||||
{'text': test_utils.BIOSEnumerations[
|
||||
uris.DCIM_BIOSString]['ok']},
|
||||
{'text': test_utils.BIOSEnumerations[
|
||||
uris.DCIM_BIOSInteger]['ok']}])
|
||||
mock_invoke.return_value = lxml.etree.fromstring(
|
||||
test_utils.BIOSInvocations[uris.DCIM_BIOSService][
|
||||
'SetAttributes']['ok'])
|
||||
|
||||
result = self.drac_client.set_bios_settings(
|
||||
{'ProcVirtualization': 'Disabled'})
|
||||
|
||||
self.assertEqual({'commit_required': True}, result)
|
||||
mock_invoke.assert_called_once_with(
|
||||
mock.ANY, uris.DCIM_BIOSService, 'SetAttributes',
|
||||
expected_selectors, expected_properties)
|
||||
|
||||
@requests_mock.Mocker()
|
||||
def test_set_bios_settings_error(self, mock_requests):
|
||||
mock_requests.post('https://1.2.3.4:443/wsman', [
|
||||
{'text': test_utils.BIOSEnumerations[
|
||||
uris.DCIM_BIOSEnumeration]['ok']},
|
||||
{'text': test_utils.BIOSEnumerations[
|
||||
uris.DCIM_BIOSString]['ok']},
|
||||
{'text': test_utils.BIOSEnumerations[
|
||||
uris.DCIM_BIOSInteger]['ok']},
|
||||
{'text': test_utils.BIOSInvocations[
|
||||
uris.DCIM_BIOSService]['SetAttributes']['error']}])
|
||||
|
||||
self.assertRaises(exceptions.DRACOperationFailed,
|
||||
self.drac_client.set_bios_settings,
|
||||
{'ProcVirtualization': 'Disabled'})
|
||||
|
||||
@requests_mock.Mocker()
|
||||
def test_set_bios_settings_with_unknown_attr(self, mock_requests):
|
||||
mock_requests.post('https://1.2.3.4:443/wsman', [
|
||||
{'text': test_utils.BIOSEnumerations[
|
||||
uris.DCIM_BIOSEnumeration]['ok']},
|
||||
{'text': test_utils.BIOSEnumerations[
|
||||
uris.DCIM_BIOSString]['ok']},
|
||||
{'text': test_utils.BIOSEnumerations[
|
||||
uris.DCIM_BIOSInteger]['ok']}])
|
||||
|
||||
self.assertRaises(exceptions.InvalidParameterValue,
|
||||
self.drac_client.set_bios_settings, {'foo': 'bar'})
|
||||
|
||||
@requests_mock.Mocker()
|
||||
def test_set_bios_settings_with_unchanged_attr(self, mock_requests):
|
||||
mock_requests.post('https://1.2.3.4:443/wsman', [
|
||||
{'text': test_utils.BIOSEnumerations[
|
||||
uris.DCIM_BIOSEnumeration]['ok']},
|
||||
{'text': test_utils.BIOSEnumerations[
|
||||
uris.DCIM_BIOSString]['ok']},
|
||||
{'text': test_utils.BIOSEnumerations[
|
||||
uris.DCIM_BIOSInteger]['ok']}])
|
||||
|
||||
result = self.drac_client.set_bios_settings(
|
||||
{'ProcVirtualization': 'Enabled'})
|
||||
|
||||
self.assertEqual({'commit_required': False}, result)
|
||||
|
||||
@requests_mock.Mocker()
|
||||
def test_set_bios_settings_with_readonly_attr(self, mock_requests):
|
||||
expected_message = ("Cannot set read-only BIOS attributes: "
|
||||
"['Proc1NumCores'].")
|
||||
mock_requests.post('https://1.2.3.4:443/wsman', [
|
||||
{'text': test_utils.BIOSEnumerations[
|
||||
uris.DCIM_BIOSEnumeration]['ok']},
|
||||
{'text': test_utils.BIOSEnumerations[
|
||||
uris.DCIM_BIOSString]['ok']},
|
||||
{'text': test_utils.BIOSEnumerations[
|
||||
uris.DCIM_BIOSInteger]['ok']}])
|
||||
|
||||
self.assertRaisesRegexp(
|
||||
exceptions.DRACOperationFailed, re.escape(expected_message),
|
||||
self.drac_client.set_bios_settings, {'Proc1NumCores': 42})
|
||||
|
||||
@requests_mock.Mocker()
|
||||
def test_set_bios_settings_with_incorrect_enum_value(self, mock_requests):
|
||||
expected_message = ("Attribute 'MemTest' cannot be set to value "
|
||||
"'foo'. It must be in ['Enabled', 'Disabled'].")
|
||||
mock_requests.post('https://1.2.3.4:443/wsman', [
|
||||
{'text': test_utils.BIOSEnumerations[
|
||||
uris.DCIM_BIOSEnumeration]['ok']},
|
||||
{'text': test_utils.BIOSEnumerations[
|
||||
uris.DCIM_BIOSString]['ok']},
|
||||
{'text': test_utils.BIOSEnumerations[
|
||||
uris.DCIM_BIOSInteger]['ok']}])
|
||||
|
||||
self.assertRaisesRegexp(
|
||||
exceptions.DRACOperationFailed, re.escape(expected_message),
|
||||
self.drac_client.set_bios_settings, {'MemTest': 'foo'})
|
||||
|
||||
@requests_mock.Mocker()
|
||||
def test_set_bios_settings_with_incorrect_regexp(self, mock_requests):
|
||||
expected_message = ("Attribute 'SystemModelName' cannot be set to "
|
||||
"value 'bar.' It must match regex 'foo'.")
|
||||
mock_requests.post('https://1.2.3.4:443/wsman', [
|
||||
{'text': test_utils.BIOSEnumerations[
|
||||
uris.DCIM_BIOSEnumeration]['ok']},
|
||||
{'text': test_utils.BIOSEnumerations[
|
||||
uris.DCIM_BIOSString]['regexp']},
|
||||
{'text': test_utils.BIOSEnumerations[
|
||||
uris.DCIM_BIOSInteger]['ok']}])
|
||||
|
||||
self.assertRaisesRegexp(
|
||||
exceptions.DRACOperationFailed, re.escape(expected_message),
|
||||
self.drac_client.set_bios_settings, {'SystemModelName': 'bar'})
|
||||
|
||||
@requests_mock.Mocker()
|
||||
def test_set_bios_settings_with_out_of_bounds_value(self, mock_requests):
|
||||
expected_message = ('Attribute Proc1NumCores cannot be set to value '
|
||||
'-42. It must be between 0 and 65535.')
|
||||
mock_requests.post('https://1.2.3.4:443/wsman', [
|
||||
{'text': test_utils.BIOSEnumerations[
|
||||
uris.DCIM_BIOSEnumeration]['ok']},
|
||||
{'text': test_utils.BIOSEnumerations[
|
||||
uris.DCIM_BIOSString]['ok']},
|
||||
{'text': test_utils.BIOSEnumerations[
|
||||
uris.DCIM_BIOSInteger]['mutable']}])
|
||||
|
||||
self.assertRaisesRegexp(
|
||||
exceptions.DRACOperationFailed, re.escape(expected_message),
|
||||
self.drac_client.set_bios_settings, {'Proc1NumCores': -42})
|
||||
|
||||
|
||||
class ClientJobManagementTestCase(base.BaseTest):
|
||||
|
||||
def setUp(self):
|
||||
@ -383,7 +589,18 @@ class ClientBIOSChangesTestCase(base.BaseTest):
|
||||
mock_create_config_job.assert_called_once_with(
|
||||
mock.ANY, resource_uri=uris.DCIM_BIOSService,
|
||||
cim_creation_class_name='DCIM_BIOSService',
|
||||
cim_name='DCIM:BIOSService', target='BIOS.Setup.1-1')
|
||||
cim_name='DCIM:BIOSService', target='BIOS.Setup.1-1', reboot=False)
|
||||
|
||||
@mock.patch.object(dracclient.resources.job.JobManagement,
|
||||
'create_config_job', spec_set=True, autospec=True)
|
||||
def test_commit_pending_bios_changes_with_reboot(self,
|
||||
mock_create_config_job):
|
||||
self.drac_client.commit_pending_bios_changes(reboot=True)
|
||||
|
||||
mock_create_config_job.assert_called_once_with(
|
||||
mock.ANY, resource_uri=uris.DCIM_BIOSService,
|
||||
cim_creation_class_name='DCIM_BIOSService',
|
||||
cim_name='DCIM:BIOSService', target='BIOS.Setup.1-1', reboot=True)
|
||||
|
||||
@mock.patch.object(dracclient.resources.job.JobManagement,
|
||||
'delete_pending_config', spec_set=True, autospec=True)
|
||||
|
@ -44,8 +44,17 @@ WSManEnumerations = {
|
||||
}
|
||||
|
||||
BIOSEnumerations = {
|
||||
uris.DCIM_ComputerSystem: {
|
||||
'ok': load_wsman_xml('computer_system-enum-ok')
|
||||
uris.DCIM_BIOSEnumeration: {
|
||||
'ok': load_wsman_xml('bios_enumeration-enum-ok')
|
||||
},
|
||||
uris.DCIM_BIOSInteger: {
|
||||
'mutable': load_wsman_xml('bios_integer-enum-mutable'),
|
||||
'ok': load_wsman_xml('bios_integer-enum-ok')
|
||||
},
|
||||
uris.DCIM_BIOSString: {
|
||||
'colliding': load_wsman_xml('bios_string-enum-colliding'),
|
||||
'ok': load_wsman_xml('bios_string-enum-ok'),
|
||||
'regexp': load_wsman_xml('bios_string-enum-regexp')
|
||||
},
|
||||
uris.DCIM_BootConfigSetting: {
|
||||
'ok': load_wsman_xml('boot_config_setting-enum-ok')
|
||||
@ -53,7 +62,10 @@ BIOSEnumerations = {
|
||||
uris.DCIM_BootSourceSetting: {
|
||||
'ok': load_wsman_xml('boot_source_setting-enum-ok'),
|
||||
'ok-11g': load_wsman_xml('boot_source_setting-enum-ok-11g')
|
||||
}
|
||||
},
|
||||
uris.DCIM_ComputerSystem: {
|
||||
'ok': load_wsman_xml('computer_system-enum-ok')
|
||||
},
|
||||
}
|
||||
|
||||
BIOSInvocations = {
|
||||
@ -65,6 +77,14 @@ BIOSInvocations = {
|
||||
'computer_system-invoke-request_state_change-error'),
|
||||
},
|
||||
},
|
||||
uris.DCIM_BIOSService: {
|
||||
'SetAttributes': {
|
||||
'ok': load_wsman_xml(
|
||||
'bios_service-invoke-set_attributes-ok'),
|
||||
'error': load_wsman_xml(
|
||||
'bios_service-invoke-set_attributes-error'),
|
||||
}
|
||||
},
|
||||
uris.DCIM_BootConfigSetting: {
|
||||
'ChangeBootOrderByInstanceID': {
|
||||
'ok': load_wsman_xml(
|
||||
|
1495
dracclient/tests/wsman_mocks/bios_enumeration-enum-ok.xml
Normal file
1495
dracclient/tests/wsman_mocks/bios_enumeration-enum-ok.xml
Normal file
File diff suppressed because it is too large
Load Diff
36
dracclient/tests/wsman_mocks/bios_integer-enum-mutable.xml
Normal file
36
dracclient/tests/wsman_mocks/bios_integer-enum-mutable.xml
Normal file
@ -0,0 +1,36 @@
|
||||
<s:Envelope xmlns:n1="http://schemas.dell.com/wbem/wscim/1/cim-schema/2/DCIM_BIOSInteger"
|
||||
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:xsi="http://www.w3.org/2001/XMLSchema-instance">
|
||||
<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:382b3463-6ab7-4998-85d5-0ac3f4d3044d</wsa:RelatesTo>
|
||||
<wsa:MessageID>uuid:319dc294-2213-1213-8eeb-a36fc6fe83b0</wsa:MessageID>
|
||||
</s:Header>
|
||||
<s:Body>
|
||||
<wsen:EnumerateResponse>
|
||||
<wsman:Items>
|
||||
<n1:DCIM_BIOSInteger>
|
||||
<n1:AttributeDisplayName>Number of Cores</n1:AttributeDisplayName>
|
||||
<n1:AttributeName>Proc1NumCores</n1:AttributeName>
|
||||
<n1:CurrentValue>8</n1:CurrentValue>
|
||||
<n1:Dependency xsi:nil="true"/>
|
||||
<n1:DisplayOrder>446</n1:DisplayOrder>
|
||||
<n1:FQDD>BIOS.Setup.1-1</n1:FQDD>
|
||||
<n1:GroupDisplayName>Processor Settings</n1:GroupDisplayName>
|
||||
<n1:GroupID>ProcSettings</n1:GroupID>
|
||||
<n1:InstanceID>BIOS.Setup.1-1:Proc1NumCores</n1:InstanceID>
|
||||
<n1:IsReadOnly>false</n1:IsReadOnly>
|
||||
<n1:LowerBound>0</n1:LowerBound>
|
||||
<n1:PendingValue xsi:nil="true"/>
|
||||
<n1:UpperBound>65535</n1:UpperBound>
|
||||
</n1:DCIM_BIOSInteger>
|
||||
</wsman:Items>
|
||||
<wsen:EnumerationContext/>
|
||||
<wsman:EndOfSequence/>
|
||||
</wsen:EnumerateResponse>
|
||||
</s:Body>
|
||||
</s:Envelope>
|
56
dracclient/tests/wsman_mocks/bios_integer-enum-ok.xml
Normal file
56
dracclient/tests/wsman_mocks/bios_integer-enum-ok.xml
Normal file
@ -0,0 +1,56 @@
|
||||
<s:Envelope xmlns:n1="http://schemas.dell.com/wbem/wscim/1/cim-schema/2/DCIM_BIOSInteger"
|
||||
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:xsi="http://www.w3.org/2001/XMLSchema-instance">
|
||||
<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:382b3463-6ab7-4998-85d5-0ac3f4d3044d</wsa:RelatesTo>
|
||||
<wsa:MessageID>uuid:319dc294-2213-1213-8eeb-a36fc6fe83b0</wsa:MessageID>
|
||||
</s:Header>
|
||||
<s:Body>
|
||||
<wsen:EnumerateResponse>
|
||||
<wsman:Items>
|
||||
<n1:DCIM_BIOSInteger>
|
||||
<n1:AttributeDisplayName>Number of Cores</n1:AttributeDisplayName>
|
||||
<n1:AttributeName>Proc1NumCores</n1:AttributeName>
|
||||
<n1:CurrentValue>8</n1:CurrentValue>
|
||||
<n1:Dependency xsi:nil="true"/>
|
||||
<n1:DisplayOrder>446</n1:DisplayOrder>
|
||||
<n1:FQDD>BIOS.Setup.1-1</n1:FQDD>
|
||||
<n1:GroupDisplayName>Processor Settings</n1:GroupDisplayName>
|
||||
<n1:GroupID>ProcSettings</n1:GroupID>
|
||||
<n1:InstanceID>BIOS.Setup.1-1:Proc1NumCores</n1:InstanceID>
|
||||
<n1:IsReadOnly>true</n1:IsReadOnly>
|
||||
<n1:LowerBound>0</n1:LowerBound>
|
||||
<n1:PendingValue xsi:nil="true"/>
|
||||
<n1:UpperBound>65535</n1:UpperBound>
|
||||
</n1:DCIM_BIOSInteger>
|
||||
<n1:DCIM_BIOSInteger>
|
||||
<n1:AttributeDisplayName>User Defined Delay (60s to 240s)</n1:AttributeDisplayName>
|
||||
<n1:AttributeName>AcPwrRcvryUserDelay</n1:AttributeName>
|
||||
<n1:CurrentValue>60</n1:CurrentValue>
|
||||
<n1:Dependency><![CDATA[
|
||||
<Dep>
|
||||
<AttrLev Op="OR">
|
||||
<ROIf Name="AcPwrRcvry">Off</ROIf>
|
||||
<ROIf Name="AcPwrRcvryDelay" Op="NOT">User</ROIf></AttrLev>
|
||||
</Dep>]]></n1:Dependency>
|
||||
<n1:DisplayOrder>1431</n1:DisplayOrder>
|
||||
<n1:FQDD>BIOS.Setup.1-1</n1:FQDD>
|
||||
<n1:GroupDisplayName>System Security</n1:GroupDisplayName>
|
||||
<n1:GroupID>SysSecurity</n1:GroupID>
|
||||
<n1:InstanceID>BIOS.Setup.1-1:AcPwrRcvryUserDelay</n1:InstanceID>
|
||||
<n1:IsReadOnly>true</n1:IsReadOnly>
|
||||
<n1:LowerBound>60</n1:LowerBound>
|
||||
<n1:PendingValue xsi:nil="true"/>
|
||||
<n1:UpperBound>240</n1:UpperBound>
|
||||
</n1:DCIM_BIOSInteger>
|
||||
</wsman:Items>
|
||||
<wsen:EnumerationContext/>
|
||||
<wsman:EndOfSequence/>
|
||||
</wsen:EnumerateResponse>
|
||||
</s:Body>
|
||||
</s:Envelope>
|
@ -0,0 +1,20 @@
|
||||
<s:Envelope xmlns:n1="http://schemas.dell.com/wbem/wscim/1/cim-schema/2/DCIM_BIOSService"
|
||||
xmlns:s="http://www.w3.org/2003/05/soap-envelope"
|
||||
xmlns:wsa="http://schemas.xmlsoap.org/ws/2004/08/addressing">
|
||||
<s:Header>
|
||||
<wsa:To>http://schemas.xmlsoap.org/ws/2004/08/addressing/role/anonymous</wsa:To>
|
||||
<wsa:Action>http://schemas.dell.com/wbem/wscim/1/cim-schema/2/DCIM_BIOSService/SetAttributesResponse</wsa:Action>
|
||||
<wsa:RelatesTo>uuid:f06dfc6d-b102-43d8-a61e-722b7ec8b7b2</wsa:RelatesTo>
|
||||
<wsa:MessageID>uuid:2bfaa9a2-223c-123c-8f55-a36fc6fe83b0</wsa:MessageID>
|
||||
</s:Header>
|
||||
<s:Body>
|
||||
<n1:SetAttributes_OUTPUT>
|
||||
<n1:Message>Invalid AttributeValue for AttributeName ProcVirtualization</n1:Message>
|
||||
<n1:MessageArguments>ProcVirtualization</n1:MessageArguments>
|
||||
<n1:MessageID>BIOS014</n1:MessageID>
|
||||
<n1:RebootRequired>Yes</n1:RebootRequired>
|
||||
<n1:ReturnValue>2</n1:ReturnValue>
|
||||
<n1:SetResult>Set PendingValue</n1:SetResult>
|
||||
</n1:SetAttributes_OUTPUT>
|
||||
</s:Body>
|
||||
</s:Envelope>
|
@ -0,0 +1,19 @@
|
||||
<s:Envelope xmlns:n1="http://schemas.dell.com/wbem/wscim/1/cim-schema/2/DCIM_BIOSService"
|
||||
xmlns:s="http://www.w3.org/2003/05/soap-envelope"
|
||||
xmlns:wsa="http://schemas.xmlsoap.org/ws/2004/08/addressing">
|
||||
<s:Header>
|
||||
<wsa:To>http://schemas.xmlsoap.org/ws/2004/08/addressing/role/anonymous</wsa:To>
|
||||
<wsa:Action>http://schemas.dell.com/wbem/wscim/1/cim-schema/2/DCIM_BIOSService/SetAttributesResponse</wsa:Action>
|
||||
<wsa:RelatesTo>uuid:9ffdced1-8f2e-441c-a42a-e6c56d9859c8</wsa:RelatesTo>
|
||||
<wsa:MessageID>uuid:d139ff73-223b-123b-8f47-a36fc6fe83b0</wsa:MessageID>
|
||||
</s:Header>
|
||||
<s:Body>
|
||||
<n1:SetAttributes_OUTPUT>
|
||||
<n1:Message>The command was successful.</n1:Message>
|
||||
<n1:MessageID>BIOS001</n1:MessageID>
|
||||
<n1:RebootRequired>Yes</n1:RebootRequired>
|
||||
<n1:ReturnValue>0</n1:ReturnValue>
|
||||
<n1:SetResult>Set PendingValue</n1:SetResult>
|
||||
</n1:SetAttributes_OUTPUT>
|
||||
</s:Body>
|
||||
</s:Envelope>
|
53
dracclient/tests/wsman_mocks/bios_string-enum-colliding.xml
Normal file
53
dracclient/tests/wsman_mocks/bios_string-enum-colliding.xml
Normal file
@ -0,0 +1,53 @@
|
||||
<s:Envelope xmlns:n1="http://schemas.dell.com/wbem/wscim/1/cim-schema/2/DCIM_BIOSString"
|
||||
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:xsi="http://www.w3.org/2001/XMLSchema-instance">
|
||||
<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:1d8b3e77-8919-4459-8f06-2d63284c15c1</wsa:RelatesTo>
|
||||
<wsa:MessageID>uuid:31707306-2213-1213-8ee9-a36fc6fe83b0</wsa:MessageID>
|
||||
</s:Header>
|
||||
<s:Body>
|
||||
<wsen:EnumerateResponse>
|
||||
<wsman:Items>
|
||||
<n1:DCIM_BIOSString>
|
||||
<n1:AttributeDisplayName>System Memory Testing</n1:AttributeDisplayName>
|
||||
<n1:AttributeName>MemTest</n1:AttributeName>
|
||||
<n1:CurrentValue>PowerEdge R320</n1:CurrentValue>
|
||||
<n1:Dependency xsi:nil="true"/>
|
||||
<n1:DisplayOrder>200</n1:DisplayOrder>
|
||||
<n1:FQDD>BIOS.Setup.1-1</n1:FQDD>
|
||||
<n1:GroupDisplayName>System Information</n1:GroupDisplayName>
|
||||
<n1:GroupID>SysInformation</n1:GroupID>
|
||||
<n1:InstanceID>BIOS.Setup.1-1:SystemModelName</n1:InstanceID>
|
||||
<n1:IsReadOnly>true</n1:IsReadOnly>
|
||||
<n1:MaxLength>32</n1:MaxLength>
|
||||
<n1:MinLength>0</n1:MinLength>
|
||||
<n1:PendingValue xsi:nil="true"/>
|
||||
<n1:ValueExpression xsi:nil="true"/>
|
||||
</n1:DCIM_BIOSString>
|
||||
<n1:DCIM_BIOSString>
|
||||
<n1:AttributeDisplayName>Memory Operating Mode</n1:AttributeDisplayName>
|
||||
<n1:AttributeName>MemOpMode</n1:AttributeName>
|
||||
<n1:CurrentValue>2.3.3</n1:CurrentValue>
|
||||
<n1:Dependency xsi:nil="true"/>
|
||||
<n1:DisplayOrder>201</n1:DisplayOrder>
|
||||
<n1:FQDD>BIOS.Setup.1-1</n1:FQDD>
|
||||
<n1:GroupDisplayName>System Information</n1:GroupDisplayName>
|
||||
<n1:GroupID>SysInformation</n1:GroupID>
|
||||
<n1:InstanceID>BIOS.Setup.1-1:SystemBiosVersion</n1:InstanceID>
|
||||
<n1:IsReadOnly>true</n1:IsReadOnly>
|
||||
<n1:MaxLength>48</n1:MaxLength>
|
||||
<n1:MinLength>0</n1:MinLength>
|
||||
<n1:PendingValue xsi:nil="true"/>
|
||||
<n1:ValueExpression xsi:nil="true"/>
|
||||
</n1:DCIM_BIOSString>
|
||||
</wsman:Items>
|
||||
<wsen:EnumerationContext/>
|
||||
<wsman:EndOfSequence/>
|
||||
</wsen:EnumerateResponse>
|
||||
</s:Body>
|
||||
</s:Envelope>
|
581
dracclient/tests/wsman_mocks/bios_string-enum-ok.xml
Normal file
581
dracclient/tests/wsman_mocks/bios_string-enum-ok.xml
Normal file
@ -0,0 +1,581 @@
|
||||
<s:Envelope xmlns:n1="http://schemas.dell.com/wbem/wscim/1/cim-schema/2/DCIM_BIOSString"
|
||||
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:xsi="http://www.w3.org/2001/XMLSchema-instance">
|
||||
<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:1d8b3e77-8919-4459-8f06-2d63284c15c1</wsa:RelatesTo>
|
||||
<wsa:MessageID>uuid:31707306-2213-1213-8ee9-a36fc6fe83b0</wsa:MessageID>
|
||||
</s:Header>
|
||||
<s:Body>
|
||||
<wsen:EnumerateResponse>
|
||||
<wsman:Items>
|
||||
<n1:DCIM_BIOSString>
|
||||
<n1:AttributeDisplayName>System Model Name</n1:AttributeDisplayName>
|
||||
<n1:AttributeName>SystemModelName</n1:AttributeName>
|
||||
<n1:CurrentValue>PowerEdge R320</n1:CurrentValue>
|
||||
<n1:Dependency xsi:nil="true"/>
|
||||
<n1:DisplayOrder>200</n1:DisplayOrder>
|
||||
<n1:FQDD>BIOS.Setup.1-1</n1:FQDD>
|
||||
<n1:GroupDisplayName>System Information</n1:GroupDisplayName>
|
||||
<n1:GroupID>SysInformation</n1:GroupID>
|
||||
<n1:InstanceID>BIOS.Setup.1-1:SystemModelName</n1:InstanceID>
|
||||
<n1:IsReadOnly>true</n1:IsReadOnly>
|
||||
<n1:MaxLength>32</n1:MaxLength>
|
||||
<n1:MinLength>0</n1:MinLength>
|
||||
<n1:PendingValue xsi:nil="true"/>
|
||||
<n1:ValueExpression xsi:nil="true"/>
|
||||
</n1:DCIM_BIOSString>
|
||||
<n1:DCIM_BIOSString>
|
||||
<n1:AttributeDisplayName>System BIOS Version</n1:AttributeDisplayName>
|
||||
<n1:AttributeName>SystemBiosVersion</n1:AttributeName>
|
||||
<n1:CurrentValue>2.3.3</n1:CurrentValue>
|
||||
<n1:Dependency xsi:nil="true"/>
|
||||
<n1:DisplayOrder>201</n1:DisplayOrder>
|
||||
<n1:FQDD>BIOS.Setup.1-1</n1:FQDD>
|
||||
<n1:GroupDisplayName>System Information</n1:GroupDisplayName>
|
||||
<n1:GroupID>SysInformation</n1:GroupID>
|
||||
<n1:InstanceID>BIOS.Setup.1-1:SystemBiosVersion</n1:InstanceID>
|
||||
<n1:IsReadOnly>true</n1:IsReadOnly>
|
||||
<n1:MaxLength>48</n1:MaxLength>
|
||||
<n1:MinLength>0</n1:MinLength>
|
||||
<n1:PendingValue xsi:nil="true"/>
|
||||
<n1:ValueExpression xsi:nil="true"/>
|
||||
</n1:DCIM_BIOSString>
|
||||
<n1:DCIM_BIOSString>
|
||||
<n1:AttributeDisplayName>System Service Tag</n1:AttributeDisplayName>
|
||||
<n1:AttributeName>SystemServiceTag</n1:AttributeName>
|
||||
<n1:CurrentValue>JLR7Q22</n1:CurrentValue>
|
||||
<n1:Dependency xsi:nil="true"/>
|
||||
<n1:DisplayOrder>202</n1:DisplayOrder>
|
||||
<n1:FQDD>BIOS.Setup.1-1</n1:FQDD>
|
||||
<n1:GroupDisplayName>System Information</n1:GroupDisplayName>
|
||||
<n1:GroupID>SysInformation</n1:GroupID>
|
||||
<n1:InstanceID>BIOS.Setup.1-1:SystemServiceTag</n1:InstanceID>
|
||||
<n1:IsReadOnly>true</n1:IsReadOnly>
|
||||
<n1:MaxLength>16</n1:MaxLength>
|
||||
<n1:MinLength>0</n1:MinLength>
|
||||
<n1:PendingValue xsi:nil="true"/>
|
||||
<n1:ValueExpression xsi:nil="true"/>
|
||||
</n1:DCIM_BIOSString>
|
||||
<n1:DCIM_BIOSString>
|
||||
<n1:AttributeDisplayName>System Manufacturer</n1:AttributeDisplayName>
|
||||
<n1:AttributeName>SystemManufacturer</n1:AttributeName>
|
||||
<n1:CurrentValue>Dell Inc.</n1:CurrentValue>
|
||||
<n1:Dependency xsi:nil="true"/>
|
||||
<n1:DisplayOrder>204</n1:DisplayOrder>
|
||||
<n1:FQDD>BIOS.Setup.1-1</n1:FQDD>
|
||||
<n1:GroupDisplayName>System Information</n1:GroupDisplayName>
|
||||
<n1:GroupID>SysInformation</n1:GroupID>
|
||||
<n1:InstanceID>BIOS.Setup.1-1:SystemManufacturer</n1:InstanceID>
|
||||
<n1:IsReadOnly>true</n1:IsReadOnly>
|
||||
<n1:MaxLength>32</n1:MaxLength>
|
||||
<n1:MinLength>0</n1:MinLength>
|
||||
<n1:PendingValue xsi:nil="true"/>
|
||||
<n1:ValueExpression xsi:nil="true"/>
|
||||
</n1:DCIM_BIOSString>
|
||||
<n1:DCIM_BIOSString>
|
||||
<n1:AttributeDisplayName>System Manufacturer Contact Information</n1:AttributeDisplayName>
|
||||
<n1:AttributeName>SysMfrContactInfo</n1:AttributeName>
|
||||
<n1:CurrentValue>www.dell.com</n1:CurrentValue>
|
||||
<n1:Dependency xsi:nil="true"/>
|
||||
<n1:DisplayOrder>205</n1:DisplayOrder>
|
||||
<n1:FQDD>BIOS.Setup.1-1</n1:FQDD>
|
||||
<n1:GroupDisplayName>System Information</n1:GroupDisplayName>
|
||||
<n1:GroupID>SysInformation</n1:GroupID>
|
||||
<n1:InstanceID>BIOS.Setup.1-1:SysMfrContactInfo</n1:InstanceID>
|
||||
<n1:IsReadOnly>true</n1:IsReadOnly>
|
||||
<n1:MaxLength>32</n1:MaxLength>
|
||||
<n1:MinLength>0</n1:MinLength>
|
||||
<n1:PendingValue xsi:nil="true"/>
|
||||
<n1:ValueExpression xsi:nil="true"/>
|
||||
</n1:DCIM_BIOSString>
|
||||
<n1:DCIM_BIOSString>
|
||||
<n1:AttributeDisplayName>System CPLD Version</n1:AttributeDisplayName>
|
||||
<n1:AttributeName>SystemCpldVersion</n1:AttributeName>
|
||||
<n1:CurrentValue>104</n1:CurrentValue>
|
||||
<n1:Dependency xsi:nil="true"/>
|
||||
<n1:DisplayOrder>206</n1:DisplayOrder>
|
||||
<n1:FQDD>BIOS.Setup.1-1</n1:FQDD>
|
||||
<n1:GroupDisplayName>System Information</n1:GroupDisplayName>
|
||||
<n1:GroupID>SysInformation</n1:GroupID>
|
||||
<n1:InstanceID>BIOS.Setup.1-1:SystemCpldVersion</n1:InstanceID>
|
||||
<n1:IsReadOnly>true</n1:IsReadOnly>
|
||||
<n1:MaxLength>8</n1:MaxLength>
|
||||
<n1:MinLength>0</n1:MinLength>
|
||||
<n1:PendingValue xsi:nil="true"/>
|
||||
<n1:ValueExpression xsi:nil="true"/>
|
||||
</n1:DCIM_BIOSString>
|
||||
<n1:DCIM_BIOSString>
|
||||
<n1:AttributeDisplayName>System Memory Size</n1:AttributeDisplayName>
|
||||
<n1:AttributeName>SysMemSize</n1:AttributeName>
|
||||
<n1:CurrentValue>32.0 GB</n1:CurrentValue>
|
||||
<n1:Dependency xsi:nil="true"/>
|
||||
<n1:DisplayOrder>300</n1:DisplayOrder>
|
||||
<n1:FQDD>BIOS.Setup.1-1</n1:FQDD>
|
||||
<n1:GroupDisplayName>Memory Settings</n1:GroupDisplayName>
|
||||
<n1:GroupID>MemSettings</n1:GroupID>
|
||||
<n1:InstanceID>BIOS.Setup.1-1:SysMemSize</n1:InstanceID>
|
||||
<n1:IsReadOnly>true</n1:IsReadOnly>
|
||||
<n1:MaxLength>20</n1:MaxLength>
|
||||
<n1:MinLength>0</n1:MinLength>
|
||||
<n1:PendingValue xsi:nil="true"/>
|
||||
<n1:ValueExpression xsi:nil="true"/>
|
||||
</n1:DCIM_BIOSString>
|
||||
<n1:DCIM_BIOSString>
|
||||
<n1:AttributeDisplayName>System Memory Type</n1:AttributeDisplayName>
|
||||
<n1:AttributeName>SysMemType</n1:AttributeName>
|
||||
<n1:CurrentValue>ECC DDR3</n1:CurrentValue>
|
||||
<n1:Dependency xsi:nil="true"/>
|
||||
<n1:DisplayOrder>301</n1:DisplayOrder>
|
||||
<n1:FQDD>BIOS.Setup.1-1</n1:FQDD>
|
||||
<n1:GroupDisplayName>Memory Settings</n1:GroupDisplayName>
|
||||
<n1:GroupID>MemSettings</n1:GroupID>
|
||||
<n1:InstanceID>BIOS.Setup.1-1:SysMemType</n1:InstanceID>
|
||||
<n1:IsReadOnly>true</n1:IsReadOnly>
|
||||
<n1:MaxLength>16</n1:MaxLength>
|
||||
<n1:MinLength>0</n1:MinLength>
|
||||
<n1:PendingValue xsi:nil="true"/>
|
||||
<n1:ValueExpression xsi:nil="true"/>
|
||||
</n1:DCIM_BIOSString>
|
||||
<n1:DCIM_BIOSString>
|
||||
<n1:AttributeDisplayName>System Memory Speed</n1:AttributeDisplayName>
|
||||
<n1:AttributeName>SysMemSpeed</n1:AttributeName>
|
||||
<n1:CurrentValue>1600 MHz</n1:CurrentValue>
|
||||
<n1:Dependency xsi:nil="true"/>
|
||||
<n1:DisplayOrder>302</n1:DisplayOrder>
|
||||
<n1:FQDD>BIOS.Setup.1-1</n1:FQDD>
|
||||
<n1:GroupDisplayName>Memory Settings</n1:GroupDisplayName>
|
||||
<n1:GroupID>MemSettings</n1:GroupID>
|
||||
<n1:InstanceID>BIOS.Setup.1-1:SysMemSpeed</n1:InstanceID>
|
||||
<n1:IsReadOnly>true</n1:IsReadOnly>
|
||||
<n1:MaxLength>16</n1:MaxLength>
|
||||
<n1:MinLength>0</n1:MinLength>
|
||||
<n1:PendingValue xsi:nil="true"/>
|
||||
<n1:ValueExpression xsi:nil="true"/>
|
||||
</n1:DCIM_BIOSString>
|
||||
<n1:DCIM_BIOSString>
|
||||
<n1:AttributeDisplayName>System Memory Voltage</n1:AttributeDisplayName>
|
||||
<n1:AttributeName>SysMemVolt</n1:AttributeName>
|
||||
<n1:CurrentValue>1.35V</n1:CurrentValue>
|
||||
<n1:Dependency xsi:nil="true"/>
|
||||
<n1:DisplayOrder>303</n1:DisplayOrder>
|
||||
<n1:FQDD>BIOS.Setup.1-1</n1:FQDD>
|
||||
<n1:GroupDisplayName>Memory Settings</n1:GroupDisplayName>
|
||||
<n1:GroupID>MemSettings</n1:GroupID>
|
||||
<n1:InstanceID>BIOS.Setup.1-1:SysMemVolt</n1:InstanceID>
|
||||
<n1:IsReadOnly>true</n1:IsReadOnly>
|
||||
<n1:MaxLength>8</n1:MaxLength>
|
||||
<n1:MinLength>0</n1:MinLength>
|
||||
<n1:PendingValue xsi:nil="true"/>
|
||||
<n1:ValueExpression xsi:nil="true"/>
|
||||
</n1:DCIM_BIOSString>
|
||||
<n1:DCIM_BIOSString>
|
||||
<n1:AttributeDisplayName>Video Memory</n1:AttributeDisplayName>
|
||||
<n1:AttributeName>VideoMem</n1:AttributeName>
|
||||
<n1:CurrentValue>16 MB</n1:CurrentValue>
|
||||
<n1:Dependency xsi:nil="true"/>
|
||||
<n1:DisplayOrder>304</n1:DisplayOrder>
|
||||
<n1:FQDD>BIOS.Setup.1-1</n1:FQDD>
|
||||
<n1:GroupDisplayName>Memory Settings</n1:GroupDisplayName>
|
||||
<n1:GroupID>MemSettings</n1:GroupID>
|
||||
<n1:InstanceID>BIOS.Setup.1-1:VideoMem</n1:InstanceID>
|
||||
<n1:IsReadOnly>true</n1:IsReadOnly>
|
||||
<n1:MaxLength>16</n1:MaxLength>
|
||||
<n1:MinLength>0</n1:MinLength>
|
||||
<n1:PendingValue xsi:nil="true"/>
|
||||
<n1:ValueExpression xsi:nil="true"/>
|
||||
</n1:DCIM_BIOSString>
|
||||
<n1:DCIM_BIOSString>
|
||||
<n1:AttributeDisplayName>Processor 64-bit Support</n1:AttributeDisplayName>
|
||||
<n1:AttributeName>Proc64bit</n1:AttributeName>
|
||||
<n1:CurrentValue>Yes</n1:CurrentValue>
|
||||
<n1:Dependency xsi:nil="true"/>
|
||||
<n1:DisplayOrder>435</n1:DisplayOrder>
|
||||
<n1:FQDD>BIOS.Setup.1-1</n1:FQDD>
|
||||
<n1:GroupDisplayName>Processor Settings</n1:GroupDisplayName>
|
||||
<n1:GroupID>ProcSettings</n1:GroupID>
|
||||
<n1:InstanceID>BIOS.Setup.1-1:Proc64bit</n1:InstanceID>
|
||||
<n1:IsReadOnly>true</n1:IsReadOnly>
|
||||
<n1:MaxLength>4</n1:MaxLength>
|
||||
<n1:MinLength>0</n1:MinLength>
|
||||
<n1:PendingValue xsi:nil="true"/>
|
||||
<n1:ValueExpression xsi:nil="true"/>
|
||||
</n1:DCIM_BIOSString>
|
||||
<n1:DCIM_BIOSString>
|
||||
<n1:AttributeDisplayName>Processor Core Speed</n1:AttributeDisplayName>
|
||||
<n1:AttributeName>ProcCoreSpeed</n1:AttributeName>
|
||||
<n1:CurrentValue>1.90 GHz</n1:CurrentValue>
|
||||
<n1:Dependency xsi:nil="true"/>
|
||||
<n1:DisplayOrder>436</n1:DisplayOrder>
|
||||
<n1:FQDD>BIOS.Setup.1-1</n1:FQDD>
|
||||
<n1:GroupDisplayName>Processor Settings</n1:GroupDisplayName>
|
||||
<n1:GroupID>ProcSettings</n1:GroupID>
|
||||
<n1:InstanceID>BIOS.Setup.1-1:ProcCoreSpeed</n1:InstanceID>
|
||||
<n1:IsReadOnly>true</n1:IsReadOnly>
|
||||
<n1:MaxLength>16</n1:MaxLength>
|
||||
<n1:MinLength>0</n1:MinLength>
|
||||
<n1:PendingValue xsi:nil="true"/>
|
||||
<n1:ValueExpression xsi:nil="true"/>
|
||||
</n1:DCIM_BIOSString>
|
||||
<n1:DCIM_BIOSString>
|
||||
<n1:AttributeDisplayName>Family-Model-Stepping</n1:AttributeDisplayName>
|
||||
<n1:AttributeName>Proc1Id</n1:AttributeName>
|
||||
<n1:CurrentValue>06-3E-4</n1:CurrentValue>
|
||||
<n1:Dependency xsi:nil="true"/>
|
||||
<n1:DisplayOrder>442</n1:DisplayOrder>
|
||||
<n1:FQDD>BIOS.Setup.1-1</n1:FQDD>
|
||||
<n1:GroupDisplayName>Processor Settings</n1:GroupDisplayName>
|
||||
<n1:GroupID>ProcSettings</n1:GroupID>
|
||||
<n1:InstanceID>BIOS.Setup.1-1:Proc1Id</n1:InstanceID>
|
||||
<n1:IsReadOnly>true</n1:IsReadOnly>
|
||||
<n1:MaxLength>8</n1:MaxLength>
|
||||
<n1:MinLength>0</n1:MinLength>
|
||||
<n1:PendingValue xsi:nil="true"/>
|
||||
<n1:ValueExpression xsi:nil="true"/>
|
||||
</n1:DCIM_BIOSString>
|
||||
<n1:DCIM_BIOSString>
|
||||
<n1:AttributeDisplayName>Brand</n1:AttributeDisplayName>
|
||||
<n1:AttributeName>Proc1Brand</n1:AttributeName>
|
||||
<n1:CurrentValue>[Intel(R) Xeon(R) CPU E5-2440 v2 @ 1.90GHz ]</n1:CurrentValue>
|
||||
<n1:Dependency xsi:nil="true"/>
|
||||
<n1:DisplayOrder>443</n1:DisplayOrder>
|
||||
<n1:FQDD>BIOS.Setup.1-1</n1:FQDD>
|
||||
<n1:GroupDisplayName>Processor Settings</n1:GroupDisplayName>
|
||||
<n1:GroupID>ProcSettings</n1:GroupID>
|
||||
<n1:InstanceID>BIOS.Setup.1-1:Proc1Brand</n1:InstanceID>
|
||||
<n1:IsReadOnly>true</n1:IsReadOnly>
|
||||
<n1:MaxLength>80</n1:MaxLength>
|
||||
<n1:MinLength>0</n1:MinLength>
|
||||
<n1:PendingValue xsi:nil="true"/>
|
||||
<n1:ValueExpression xsi:nil="true"/>
|
||||
</n1:DCIM_BIOSString>
|
||||
<n1:DCIM_BIOSString>
|
||||
<n1:AttributeDisplayName>Level 2 Cache</n1:AttributeDisplayName>
|
||||
<n1:AttributeName>Proc1L2Cache</n1:AttributeName>
|
||||
<n1:CurrentValue>8x256 KB</n1:CurrentValue>
|
||||
<n1:Dependency xsi:nil="true"/>
|
||||
<n1:DisplayOrder>444</n1:DisplayOrder>
|
||||
<n1:FQDD>BIOS.Setup.1-1</n1:FQDD>
|
||||
<n1:GroupDisplayName>Processor Settings</n1:GroupDisplayName>
|
||||
<n1:GroupID>ProcSettings</n1:GroupID>
|
||||
<n1:InstanceID>BIOS.Setup.1-1:Proc1L2Cache</n1:InstanceID>
|
||||
<n1:IsReadOnly>true</n1:IsReadOnly>
|
||||
<n1:MaxLength>16</n1:MaxLength>
|
||||
<n1:MinLength>0</n1:MinLength>
|
||||
<n1:PendingValue xsi:nil="true"/>
|
||||
<n1:ValueExpression xsi:nil="true"/>
|
||||
</n1:DCIM_BIOSString>
|
||||
<n1:DCIM_BIOSString>
|
||||
<n1:AttributeDisplayName>Level 3 Cache</n1:AttributeDisplayName>
|
||||
<n1:AttributeName>Proc1L3Cache</n1:AttributeName>
|
||||
<n1:CurrentValue>20 MB</n1:CurrentValue>
|
||||
<n1:Dependency xsi:nil="true"/>
|
||||
<n1:DisplayOrder>445</n1:DisplayOrder>
|
||||
<n1:FQDD>BIOS.Setup.1-1</n1:FQDD>
|
||||
<n1:GroupDisplayName>Processor Settings</n1:GroupDisplayName>
|
||||
<n1:GroupID>ProcSettings</n1:GroupID>
|
||||
<n1:InstanceID>BIOS.Setup.1-1:Proc1L3Cache</n1:InstanceID>
|
||||
<n1:IsReadOnly>true</n1:IsReadOnly>
|
||||
<n1:MaxLength>16</n1:MaxLength>
|
||||
<n1:MinLength>0</n1:MinLength>
|
||||
<n1:PendingValue xsi:nil="true"/>
|
||||
<n1:ValueExpression xsi:nil="true"/>
|
||||
</n1:DCIM_BIOSString>
|
||||
<n1:DCIM_BIOSString>
|
||||
<n1:AttributeDisplayName>Model</n1:AttributeDisplayName>
|
||||
<n1:AttributeName>SataPortAModel</n1:AttributeName>
|
||||
<n1:CurrentValue>Unknown</n1:CurrentValue>
|
||||
<n1:Dependency xsi:nil="true"/>
|
||||
<n1:DisplayOrder>507</n1:DisplayOrder>
|
||||
<n1:FQDD>BIOS.Setup.1-1</n1:FQDD>
|
||||
<n1:GroupDisplayName>SATA Settings</n1:GroupDisplayName>
|
||||
<n1:GroupID>SataSettings</n1:GroupID>
|
||||
<n1:InstanceID>BIOS.Setup.1-1:SataPortAModel</n1:InstanceID>
|
||||
<n1:IsReadOnly>true</n1:IsReadOnly>
|
||||
<n1:MaxLength>40</n1:MaxLength>
|
||||
<n1:MinLength>0</n1:MinLength>
|
||||
<n1:PendingValue xsi:nil="true"/>
|
||||
<n1:ValueExpression xsi:nil="true"/>
|
||||
</n1:DCIM_BIOSString>
|
||||
<n1:DCIM_BIOSString>
|
||||
<n1:AttributeDisplayName>Drive Type</n1:AttributeDisplayName>
|
||||
<n1:AttributeName>SataPortADriveType</n1:AttributeName>
|
||||
<n1:CurrentValue>Unknown Device</n1:CurrentValue>
|
||||
<n1:Dependency xsi:nil="true"/>
|
||||
<n1:DisplayOrder>508</n1:DisplayOrder>
|
||||
<n1:FQDD>BIOS.Setup.1-1</n1:FQDD>
|
||||
<n1:GroupDisplayName>SATA Settings</n1:GroupDisplayName>
|
||||
<n1:GroupID>SataSettings</n1:GroupID>
|
||||
<n1:InstanceID>BIOS.Setup.1-1:SataPortADriveType</n1:InstanceID>
|
||||
<n1:IsReadOnly>true</n1:IsReadOnly>
|
||||
<n1:MaxLength>20</n1:MaxLength>
|
||||
<n1:MinLength>0</n1:MinLength>
|
||||
<n1:PendingValue xsi:nil="true"/>
|
||||
<n1:ValueExpression xsi:nil="true"/>
|
||||
</n1:DCIM_BIOSString>
|
||||
<n1:DCIM_BIOSString>
|
||||
<n1:AttributeDisplayName>Capacity</n1:AttributeDisplayName>
|
||||
<n1:AttributeName>SataPortACapacity</n1:AttributeName>
|
||||
<n1:CurrentValue>N/A</n1:CurrentValue>
|
||||
<n1:Dependency xsi:nil="true"/>
|
||||
<n1:DisplayOrder>509</n1:DisplayOrder>
|
||||
<n1:FQDD>BIOS.Setup.1-1</n1:FQDD>
|
||||
<n1:GroupDisplayName>SATA Settings</n1:GroupDisplayName>
|
||||
<n1:GroupID>SataSettings</n1:GroupID>
|
||||
<n1:InstanceID>BIOS.Setup.1-1:SataPortACapacity</n1:InstanceID>
|
||||
<n1:IsReadOnly>true</n1:IsReadOnly>
|
||||
<n1:MaxLength>18</n1:MaxLength>
|
||||
<n1:MinLength>0</n1:MinLength>
|
||||
<n1:PendingValue xsi:nil="true"/>
|
||||
<n1:ValueExpression xsi:nil="true"/>
|
||||
</n1:DCIM_BIOSString>
|
||||
<n1:DCIM_BIOSString>
|
||||
<n1:AttributeDisplayName>Model</n1:AttributeDisplayName>
|
||||
<n1:AttributeName>SataPortBModel</n1:AttributeName>
|
||||
<n1:CurrentValue>Unknown</n1:CurrentValue>
|
||||
<n1:Dependency xsi:nil="true"/>
|
||||
<n1:DisplayOrder>513</n1:DisplayOrder>
|
||||
<n1:FQDD>BIOS.Setup.1-1</n1:FQDD>
|
||||
<n1:GroupDisplayName>SATA Settings</n1:GroupDisplayName>
|
||||
<n1:GroupID>SataSettings</n1:GroupID>
|
||||
<n1:InstanceID>BIOS.Setup.1-1:SataPortBModel</n1:InstanceID>
|
||||
<n1:IsReadOnly>true</n1:IsReadOnly>
|
||||
<n1:MaxLength>40</n1:MaxLength>
|
||||
<n1:MinLength>0</n1:MinLength>
|
||||
<n1:PendingValue xsi:nil="true"/>
|
||||
<n1:ValueExpression xsi:nil="true"/>
|
||||
</n1:DCIM_BIOSString>
|
||||
<n1:DCIM_BIOSString>
|
||||
<n1:AttributeDisplayName>Drive Type</n1:AttributeDisplayName>
|
||||
<n1:AttributeName>SataPortBDriveType</n1:AttributeName>
|
||||
<n1:CurrentValue>Unknown Device</n1:CurrentValue>
|
||||
<n1:Dependency xsi:nil="true"/>
|
||||
<n1:DisplayOrder>514</n1:DisplayOrder>
|
||||
<n1:FQDD>BIOS.Setup.1-1</n1:FQDD>
|
||||
<n1:GroupDisplayName>SATA Settings</n1:GroupDisplayName>
|
||||
<n1:GroupID>SataSettings</n1:GroupID>
|
||||
<n1:InstanceID>BIOS.Setup.1-1:SataPortBDriveType</n1:InstanceID>
|
||||
<n1:IsReadOnly>true</n1:IsReadOnly>
|
||||
<n1:MaxLength>20</n1:MaxLength>
|
||||
<n1:MinLength>0</n1:MinLength>
|
||||
<n1:PendingValue xsi:nil="true"/>
|
||||
<n1:ValueExpression xsi:nil="true"/>
|
||||
</n1:DCIM_BIOSString>
|
||||
<n1:DCIM_BIOSString>
|
||||
<n1:AttributeDisplayName>Capacity</n1:AttributeDisplayName>
|
||||
<n1:AttributeName>SataPortBCapacity</n1:AttributeName>
|
||||
<n1:CurrentValue>N/A</n1:CurrentValue>
|
||||
<n1:Dependency xsi:nil="true"/>
|
||||
<n1:DisplayOrder>515</n1:DisplayOrder>
|
||||
<n1:FQDD>BIOS.Setup.1-1</n1:FQDD>
|
||||
<n1:GroupDisplayName>SATA Settings</n1:GroupDisplayName>
|
||||
<n1:GroupID>SataSettings</n1:GroupID>
|
||||
<n1:InstanceID>BIOS.Setup.1-1:SataPortBCapacity</n1:InstanceID>
|
||||
<n1:IsReadOnly>true</n1:IsReadOnly>
|
||||
<n1:MaxLength>18</n1:MaxLength>
|
||||
<n1:MinLength>0</n1:MinLength>
|
||||
<n1:PendingValue xsi:nil="true"/>
|
||||
<n1:ValueExpression xsi:nil="true"/>
|
||||
</n1:DCIM_BIOSString>
|
||||
<n1:DCIM_BIOSString>
|
||||
<n1:AttributeDisplayName>Model</n1:AttributeDisplayName>
|
||||
<n1:AttributeName>SataPortCModel</n1:AttributeName>
|
||||
<n1:CurrentValue>Unknown</n1:CurrentValue>
|
||||
<n1:Dependency xsi:nil="true"/>
|
||||
<n1:DisplayOrder>519</n1:DisplayOrder>
|
||||
<n1:FQDD>BIOS.Setup.1-1</n1:FQDD>
|
||||
<n1:GroupDisplayName>SATA Settings</n1:GroupDisplayName>
|
||||
<n1:GroupID>SataSettings</n1:GroupID>
|
||||
<n1:InstanceID>BIOS.Setup.1-1:SataPortCModel</n1:InstanceID>
|
||||
<n1:IsReadOnly>true</n1:IsReadOnly>
|
||||
<n1:MaxLength>40</n1:MaxLength>
|
||||
<n1:MinLength>0</n1:MinLength>
|
||||
<n1:PendingValue xsi:nil="true"/>
|
||||
<n1:ValueExpression xsi:nil="true"/>
|
||||
</n1:DCIM_BIOSString>
|
||||
<n1:DCIM_BIOSString>
|
||||
<n1:AttributeDisplayName>Drive Type</n1:AttributeDisplayName>
|
||||
<n1:AttributeName>SataPortCDriveType</n1:AttributeName>
|
||||
<n1:CurrentValue>Unknown Device</n1:CurrentValue>
|
||||
<n1:Dependency xsi:nil="true"/>
|
||||
<n1:DisplayOrder>520</n1:DisplayOrder>
|
||||
<n1:FQDD>BIOS.Setup.1-1</n1:FQDD>
|
||||
<n1:GroupDisplayName>SATA Settings</n1:GroupDisplayName>
|
||||
<n1:GroupID>SataSettings</n1:GroupID>
|
||||
<n1:InstanceID>BIOS.Setup.1-1:SataPortCDriveType</n1:InstanceID>
|
||||
<n1:IsReadOnly>true</n1:IsReadOnly>
|
||||
<n1:MaxLength>20</n1:MaxLength>
|
||||
<n1:MinLength>0</n1:MinLength>
|
||||
<n1:PendingValue xsi:nil="true"/>
|
||||
<n1:ValueExpression xsi:nil="true"/>
|
||||
</n1:DCIM_BIOSString>
|
||||
<n1:DCIM_BIOSString>
|
||||
<n1:AttributeDisplayName>Capacity</n1:AttributeDisplayName>
|
||||
<n1:AttributeName>SataPortCCapacity</n1:AttributeName>
|
||||
<n1:CurrentValue>N/A</n1:CurrentValue>
|
||||
<n1:Dependency xsi:nil="true"/>
|
||||
<n1:DisplayOrder>521</n1:DisplayOrder>
|
||||
<n1:FQDD>BIOS.Setup.1-1</n1:FQDD>
|
||||
<n1:GroupDisplayName>SATA Settings</n1:GroupDisplayName>
|
||||
<n1:GroupID>SataSettings</n1:GroupID>
|
||||
<n1:InstanceID>BIOS.Setup.1-1:SataPortCCapacity</n1:InstanceID>
|
||||
<n1:IsReadOnly>true</n1:IsReadOnly>
|
||||
<n1:MaxLength>18</n1:MaxLength>
|
||||
<n1:MinLength>0</n1:MinLength>
|
||||
<n1:PendingValue xsi:nil="true"/>
|
||||
<n1:ValueExpression xsi:nil="true"/>
|
||||
</n1:DCIM_BIOSString>
|
||||
<n1:DCIM_BIOSString>
|
||||
<n1:AttributeDisplayName>Model</n1:AttributeDisplayName>
|
||||
<n1:AttributeName>SataPortDModel</n1:AttributeName>
|
||||
<n1:CurrentValue>Unknown</n1:CurrentValue>
|
||||
<n1:Dependency xsi:nil="true"/>
|
||||
<n1:DisplayOrder>525</n1:DisplayOrder>
|
||||
<n1:FQDD>BIOS.Setup.1-1</n1:FQDD>
|
||||
<n1:GroupDisplayName>SATA Settings</n1:GroupDisplayName>
|
||||
<n1:GroupID>SataSettings</n1:GroupID>
|
||||
<n1:InstanceID>BIOS.Setup.1-1:SataPortDModel</n1:InstanceID>
|
||||
<n1:IsReadOnly>true</n1:IsReadOnly>
|
||||
<n1:MaxLength>40</n1:MaxLength>
|
||||
<n1:MinLength>0</n1:MinLength>
|
||||
<n1:PendingValue xsi:nil="true"/>
|
||||
<n1:ValueExpression xsi:nil="true"/>
|
||||
</n1:DCIM_BIOSString>
|
||||
<n1:DCIM_BIOSString>
|
||||
<n1:AttributeDisplayName>Drive Type</n1:AttributeDisplayName>
|
||||
<n1:AttributeName>SataPortDDriveType</n1:AttributeName>
|
||||
<n1:CurrentValue>Unknown Device</n1:CurrentValue>
|
||||
<n1:Dependency xsi:nil="true"/>
|
||||
<n1:DisplayOrder>526</n1:DisplayOrder>
|
||||
<n1:FQDD>BIOS.Setup.1-1</n1:FQDD>
|
||||
<n1:GroupDisplayName>SATA Settings</n1:GroupDisplayName>
|
||||
<n1:GroupID>SataSettings</n1:GroupID>
|
||||
<n1:InstanceID>BIOS.Setup.1-1:SataPortDDriveType</n1:InstanceID>
|
||||
<n1:IsReadOnly>true</n1:IsReadOnly>
|
||||
<n1:MaxLength>20</n1:MaxLength>
|
||||
<n1:MinLength>0</n1:MinLength>
|
||||
<n1:PendingValue xsi:nil="true"/>
|
||||
<n1:ValueExpression xsi:nil="true"/>
|
||||
</n1:DCIM_BIOSString>
|
||||
<n1:DCIM_BIOSString>
|
||||
<n1:AttributeDisplayName>Capacity</n1:AttributeDisplayName>
|
||||
<n1:AttributeName>SataPortDCapacity</n1:AttributeName>
|
||||
<n1:CurrentValue>N/A</n1:CurrentValue>
|
||||
<n1:Dependency xsi:nil="true"/>
|
||||
<n1:DisplayOrder>527</n1:DisplayOrder>
|
||||
<n1:FQDD>BIOS.Setup.1-1</n1:FQDD>
|
||||
<n1:GroupDisplayName>SATA Settings</n1:GroupDisplayName>
|
||||
<n1:GroupID>SataSettings</n1:GroupID>
|
||||
<n1:InstanceID>BIOS.Setup.1-1:SataPortDCapacity</n1:InstanceID>
|
||||
<n1:IsReadOnly>true</n1:IsReadOnly>
|
||||
<n1:MaxLength>18</n1:MaxLength>
|
||||
<n1:MinLength>0</n1:MinLength>
|
||||
<n1:PendingValue xsi:nil="true"/>
|
||||
<n1:ValueExpression xsi:nil="true"/>
|
||||
</n1:DCIM_BIOSString>
|
||||
<n1:DCIM_BIOSString>
|
||||
<n1:AttributeDisplayName>Model</n1:AttributeDisplayName>
|
||||
<n1:AttributeName>SataPortEModel</n1:AttributeName>
|
||||
<n1:CurrentValue>HL-DT-ST DVD-ROM DU90N </n1:CurrentValue>
|
||||
<n1:Dependency xsi:nil="true"/>
|
||||
<n1:DisplayOrder>531</n1:DisplayOrder>
|
||||
<n1:FQDD>BIOS.Setup.1-1</n1:FQDD>
|
||||
<n1:GroupDisplayName>SATA Settings</n1:GroupDisplayName>
|
||||
<n1:GroupID>SataSettings</n1:GroupID>
|
||||
<n1:InstanceID>BIOS.Setup.1-1:SataPortEModel</n1:InstanceID>
|
||||
<n1:IsReadOnly>true</n1:IsReadOnly>
|
||||
<n1:MaxLength>40</n1:MaxLength>
|
||||
<n1:MinLength>0</n1:MinLength>
|
||||
<n1:PendingValue xsi:nil="true"/>
|
||||
<n1:ValueExpression xsi:nil="true"/>
|
||||
</n1:DCIM_BIOSString>
|
||||
<n1:DCIM_BIOSString>
|
||||
<n1:AttributeDisplayName>Drive Type</n1:AttributeDisplayName>
|
||||
<n1:AttributeName>SataPortEDriveType</n1:AttributeName>
|
||||
<n1:CurrentValue>Optical Drive</n1:CurrentValue>
|
||||
<n1:Dependency xsi:nil="true"/>
|
||||
<n1:DisplayOrder>532</n1:DisplayOrder>
|
||||
<n1:FQDD>BIOS.Setup.1-1</n1:FQDD>
|
||||
<n1:GroupDisplayName>SATA Settings</n1:GroupDisplayName>
|
||||
<n1:GroupID>SataSettings</n1:GroupID>
|
||||
<n1:InstanceID>BIOS.Setup.1-1:SataPortEDriveType</n1:InstanceID>
|
||||
<n1:IsReadOnly>true</n1:IsReadOnly>
|
||||
<n1:MaxLength>20</n1:MaxLength>
|
||||
<n1:MinLength>0</n1:MinLength>
|
||||
<n1:PendingValue xsi:nil="true"/>
|
||||
<n1:ValueExpression xsi:nil="true"/>
|
||||
</n1:DCIM_BIOSString>
|
||||
<n1:DCIM_BIOSString>
|
||||
<n1:AttributeDisplayName>Capacity</n1:AttributeDisplayName>
|
||||
<n1:AttributeName>SataPortECapacity</n1:AttributeName>
|
||||
<n1:CurrentValue>N/A</n1:CurrentValue>
|
||||
<n1:Dependency xsi:nil="true"/>
|
||||
<n1:DisplayOrder>533</n1:DisplayOrder>
|
||||
<n1:FQDD>BIOS.Setup.1-1</n1:FQDD>
|
||||
<n1:GroupDisplayName>SATA Settings</n1:GroupDisplayName>
|
||||
<n1:GroupID>SataSettings</n1:GroupID>
|
||||
<n1:InstanceID>BIOS.Setup.1-1:SataPortECapacity</n1:InstanceID>
|
||||
<n1:IsReadOnly>true</n1:IsReadOnly>
|
||||
<n1:MaxLength>18</n1:MaxLength>
|
||||
<n1:MinLength>0</n1:MinLength>
|
||||
<n1:PendingValue xsi:nil="true"/>
|
||||
<n1:ValueExpression xsi:nil="true"/>
|
||||
</n1:DCIM_BIOSString>
|
||||
<n1:DCIM_BIOSString>
|
||||
<n1:AttributeDisplayName>Intel(R) AES-NI</n1:AttributeDisplayName>
|
||||
<n1:AttributeName>AesNi</n1:AttributeName>
|
||||
<n1:CurrentValue>Enabled</n1:CurrentValue>
|
||||
<n1:Dependency xsi:nil="true"/>
|
||||
<n1:DisplayOrder>1400</n1:DisplayOrder>
|
||||
<n1:FQDD>BIOS.Setup.1-1</n1:FQDD>
|
||||
<n1:GroupDisplayName>System Security</n1:GroupDisplayName>
|
||||
<n1:GroupID>SysSecurity</n1:GroupID>
|
||||
<n1:InstanceID>BIOS.Setup.1-1:AesNi</n1:InstanceID>
|
||||
<n1:IsReadOnly>true</n1:IsReadOnly>
|
||||
<n1:MaxLength>20</n1:MaxLength>
|
||||
<n1:MinLength>0</n1:MinLength>
|
||||
<n1:PendingValue xsi:nil="true"/>
|
||||
<n1:ValueExpression xsi:nil="true"/>
|
||||
</n1:DCIM_BIOSString>
|
||||
<n1:DCIM_BIOSString>
|
||||
<n1:AttributeDisplayName>TPM Status</n1:AttributeDisplayName>
|
||||
<n1:AttributeName>TpmStatus</n1:AttributeName>
|
||||
<n1:CurrentValue>Unknown</n1:CurrentValue>
|
||||
<n1:Dependency xsi:nil="true"/>
|
||||
<n1:DisplayOrder>1413</n1:DisplayOrder>
|
||||
<n1:FQDD>BIOS.Setup.1-1</n1:FQDD>
|
||||
<n1:GroupDisplayName>System Security</n1:GroupDisplayName>
|
||||
<n1:GroupID>SysSecurity</n1:GroupID>
|
||||
<n1:InstanceID>BIOS.Setup.1-1:TpmStatus</n1:InstanceID>
|
||||
<n1:IsReadOnly>true</n1:IsReadOnly>
|
||||
<n1:MaxLength>24</n1:MaxLength>
|
||||
<n1:MinLength>0</n1:MinLength>
|
||||
<n1:PendingValue xsi:nil="true"/>
|
||||
<n1:ValueExpression xsi:nil="true"/>
|
||||
</n1:DCIM_BIOSString>
|
||||
<n1:DCIM_BIOSString>
|
||||
<n1:AttributeDisplayName>Asset Tag</n1:AttributeDisplayName>
|
||||
<n1:AttributeName>AssetTag</n1:AttributeName>
|
||||
<n1:CurrentValue xsi:nil="true"/>
|
||||
<n1:Dependency xsi:nil="true"/>
|
||||
<n1:DisplayOrder>1504</n1:DisplayOrder>
|
||||
<n1:FQDD>BIOS.Setup.1-1</n1:FQDD>
|
||||
<n1:GroupDisplayName>Miscellaneous Settings</n1:GroupDisplayName>
|
||||
<n1:GroupID>MiscSettings</n1:GroupID>
|
||||
<n1:InstanceID>BIOS.Setup.1-1:AssetTag</n1:InstanceID>
|
||||
<n1:IsReadOnly>false</n1:IsReadOnly>
|
||||
<n1:MaxLength>30</n1:MaxLength>
|
||||
<n1:MinLength>0</n1:MinLength>
|
||||
<n1:PendingValue xsi:nil="true"/>
|
||||
<n1:ValueExpression>^[ -~]{0,30}$</n1:ValueExpression>
|
||||
</n1:DCIM_BIOSString>
|
||||
</wsman:Items>
|
||||
<wsen:EnumerationContext/>
|
||||
<wsman:EndOfSequence/>
|
||||
</wsen:EnumerateResponse>
|
||||
</s:Body>
|
||||
</s:Envelope>
|
37
dracclient/tests/wsman_mocks/bios_string-enum-regexp.xml
Normal file
37
dracclient/tests/wsman_mocks/bios_string-enum-regexp.xml
Normal file
@ -0,0 +1,37 @@
|
||||
<s:Envelope xmlns:n1="http://schemas.dell.com/wbem/wscim/1/cim-schema/2/DCIM_BIOSString"
|
||||
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:xsi="http://www.w3.org/2001/XMLSchema-instance">
|
||||
<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:1d8b3e77-8919-4459-8f06-2d63284c15c1</wsa:RelatesTo>
|
||||
<wsa:MessageID>uuid:31707306-2213-1213-8ee9-a36fc6fe83b0</wsa:MessageID>
|
||||
</s:Header>
|
||||
<s:Body>
|
||||
<wsen:EnumerateResponse>
|
||||
<wsman:Items>
|
||||
<n1:DCIM_BIOSString>
|
||||
<n1:AttributeDisplayName>System Model Name</n1:AttributeDisplayName>
|
||||
<n1:AttributeName>SystemModelName</n1:AttributeName>
|
||||
<n1:CurrentValue>PowerEdge R320</n1:CurrentValue>
|
||||
<n1:Dependency xsi:nil="true"/>
|
||||
<n1:DisplayOrder>200</n1:DisplayOrder>
|
||||
<n1:FQDD>BIOS.Setup.1-1</n1:FQDD>
|
||||
<n1:GroupDisplayName>System Information</n1:GroupDisplayName>
|
||||
<n1:GroupID>SysInformation</n1:GroupID>
|
||||
<n1:InstanceID>BIOS.Setup.1-1:SystemModelName</n1:InstanceID>
|
||||
<n1:IsReadOnly>false</n1:IsReadOnly>
|
||||
<n1:MaxLength>32</n1:MaxLength>
|
||||
<n1:MinLength>0</n1:MinLength>
|
||||
<n1:PendingValue xsi:nil="true"/>
|
||||
<n1:ValueExpression>foo</n1:ValueExpression>
|
||||
</n1:DCIM_BIOSString>
|
||||
</wsman:Items>
|
||||
<wsen:EnumerationContext/>
|
||||
<wsman:EndOfSequence/>
|
||||
</wsen:EnumerateResponse>
|
||||
</s:Body>
|
||||
</s:Envelope>
|
@ -15,6 +15,8 @@
|
||||
Common functionalities shared between different DRAC modules.
|
||||
"""
|
||||
|
||||
NS_XMLSchema_Instance = 'http://www.w3.org/2001/XMLSchema-instance'
|
||||
|
||||
# ReturnValue constants
|
||||
RET_SUCCESS = '0'
|
||||
RET_ERROR = '2'
|
||||
@ -42,7 +44,22 @@ def find_xml(doc, item, namespace, find_all=False):
|
||||
return doc.find(query)
|
||||
|
||||
|
||||
def get_wsman_resource_attr(doc, resource_uri, attr_name):
|
||||
"""Find an attribute of a resource in an ElementTree object"""
|
||||
def get_wsman_resource_attr(doc, resource_uri, attr_name, nullable=False):
|
||||
"""Find an attribute of a resource in an ElementTree object.
|
||||
|
||||
return find_xml(doc, attr_name, resource_uri).text.strip()
|
||||
:param doc: the element tree object.
|
||||
:param resource_uri: the resource URI of the namespace.
|
||||
:param attr_name: the name of the attribute.
|
||||
:param: nullable: enables checking if the element contains an
|
||||
XMLSchema-instance namespaced nil attribute that has a
|
||||
value of True. In this case, it will return None.
|
||||
:returns: value of the attribute
|
||||
"""
|
||||
item = find_xml(doc, attr_name, resource_uri)
|
||||
|
||||
if not nullable:
|
||||
return item.text.strip()
|
||||
else:
|
||||
nil_attr = item.attrib.get('{%s}nil' % NS_XMLSchema_Instance)
|
||||
if nil_attr != 'true':
|
||||
return item.text.strip()
|
||||
|
Loading…
Reference in New Issue
Block a user