# 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.
from . import AMTBoot
from . import AMTPower
from . import AMTKVM
from . import AMTOptIn
from . import AMTRedirection
from . import AMTEthernet
from . import wsmanData
from . import WryDict
from . import wsmanResource
from . import wsmanModule
[docs]class AMTDevice(wsmanModule.wsmanModule):
'''A wrapper class which packages AMT functionality into an accessible, device-centric format.'''
_RESOURCES = {
'bios': 'CIM_SystemBIOS',
}
def __init__(self, target = None, is_ssl = True, username = None, password = None, debug = False, showxml = False):
'''
Create the separate resource classes
@param target: the hostname or IP address of the wsman service
@param is_ssl: should we communicate using SSL?
@param username: the username to log in with
@param password: the password to log in with
'''
self._debug = debug
self._showxml = showxml
# Stash the settings everyone will need
self.target = target
self.is_ssl = is_ssl
self.username = username
self.password = password
# Now create the resource classes
self.boot = AMTBoot.AMTBoot(self)
self.power = AMTPower.AMTPower(self)
self.kvm = AMTKVM.AMTKVM(self)
self.opt_in = AMTOptIn.AMTOptIn(self)
self.redirection = AMTRedirection.AMTRedirection(self)
self.eth = AMTEthernet.AMTEthernet(self)
wsmanModule.wsmanModule.__init__(self, self)
@property
def debug(self):
return self._debug
@debug.setter
def debug(self, debug):
self._debug = debug
self.boot.debug = debug
self.power.debug = debug
self.kvm.debug = debug
self.opt_in.debug = debug
self.redirection.debug = debug
@property
def showxml(self):
return self._showxml
@showxml.setter
def showxml(self, showxml):
self._showxml = showxml
self.boot.showxml = showxml
self.power.showxml = showxml
self.kvm.showxml = showxml
self.opt_in.showxml = showxml
self.redirection.showxml = showxml
@property
def bios(self):
'''
A property which returns the BIOS identifiers (for the code, not settings)
'''
response = self.RESOURCES['bios'].get()
return response
[docs] def dump(self, as_json = True):
'''
Print all of the known information about the device.
:returns: WryDict or json.
'''
output = WryDict.WryDict()
impossible = []
for name, methods in wsmanData.RESOURCE_METHODS.items():
try:
res = wsmanResource.wsmanResource(
target = self.target,
is_ssl = self.is_ssl,
username = self.username,
password = self.password,
resource = name,
debug = self.debug,
showxml = self.showxml,
)
methods = methods.keys()
if 'enumerate' in methods:
resource = res.enumerate()
elif 'get' in methods:
resource = res.get()
else:
raise NotImplementedError('The resource %r does not define a supported method for this action.' % name)
output.update(resource)
except:
raise
impossible.append(name)
messages = ['# Could not dump %s' % name for name in impossible]
if as_json:
return '\n'.join(messages) + '\n' + output.as_json()
return output