Source code for openlmi.storage.ServiceProvider

# Copyright (C) 2012 Red Hat, Inc.  All rights reserved.
#
# This library is free software; you can redistribute it and/or
# modify it under the terms of the GNU Lesser General Public
# License as published by the Free Software Foundation; either
# version 2.1 of the License, or (at your option) any later version.
#
# This library is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
# Lesser General Public License for more details.
#
# You should have received a copy of the GNU Lesser General Public
# License along with this library; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
#
# Authors: Jan Safranek <jsafrane@redhat.com>
# -*- coding: utf-8 -*-
""""
Module for ServiceProvider class.

ServiceProvider
---------------

.. autoclass:: ServiceProvider
    :members:

"""

from openlmi.storage.BaseProvider import BaseProvider
import pywbem
import openlmi.common.cmpi_logging as cmpi_logging

[docs]class ServiceProvider(BaseProvider): """ Base class for every LMI_*Service providers. It implements get_instance and enum_instances methods. """ @cmpi_logging.trace_method
[docs] def __init__(self, classname, *args, **kwargs): super(ServiceProvider, self).__init__(*args, **kwargs) self.classname = classname
@cmpi_logging.trace_method
[docs] def check_instance(self, model): """ Check if the model represents real instance of this class. Throw an error if not. """ if (model['SystemCreationClassName'] != self.config.system_class_name or model['SystemName'] != self.config.system_name or model['CreationClassName'] != self.classname or model['Name'] != self.classname): raise pywbem.CIMError(pywbem.CIM_ERR_NOT_FOUND, "Wrong keys.")
@cmpi_logging.trace_method
[docs] def get_instance(self, env, model): """ Provider implementation of GetInstance intrinsic method. """ self.check_instance(model) model['EnabledDefault'] = self.Values.EnabledDefault.Enabled model['EnabledState'] = self.Values.EnabledState.Enabled model['HealthState'] = self.Values.HealthState.OK model['OperationalStatus'] = [self.Values.OperationalStatus.OK, ] model['PrimaryStatus'] = self.Values.PrimaryStatus.OK model['Started'] = True model['StartMode'] = self.Values.StartMode.Automatic return model
@cmpi_logging.trace_method
[docs] def enum_instances(self, env, model, keys_only): """ Provider implementation of EnumerateInstances intrinsic method. """ model.path.update({'CreationClassName': None, 'SystemName': None, 'Name': None, 'SystemCreationClassName': None}) model['SystemName'] = self.config.system_name model['SystemCreationClassName'] = self.config.system_class_name model['CreationClassName'] = self.classname model['Name'] = self.classname if keys_only: yield model else: yield self.get_instance(env, model)
@cmpi_logging.trace_method def _get_instance_name(self): """ Return CIMInstanceName of the service singleton.""" name = pywbem.CIMInstanceName( classname=self.classname, namespace=self.config.namespace, keybindings={ 'SystemName': self.config.system_name, 'SystemCreationClassName': self.config.system_class_name, 'CreationClassName': self.classname, 'Name': self.classname}) return name class Values(object): class EnabledDefault(object): Enabled = pywbem.Uint16(2) Disabled = pywbem.Uint16(3) Not_Applicable = pywbem.Uint16(5) Enabled_but_Offline = pywbem.Uint16(6) No_Default = pywbem.Uint16(7) Quiesce = pywbem.Uint16(9) # DMTF_Reserved = .. # Vendor_Reserved = 32768..65535 class EnabledState(object): Unknown = pywbem.Uint16(0) Other = pywbem.Uint16(1) Enabled = pywbem.Uint16(2) Disabled = pywbem.Uint16(3) Shutting_Down = pywbem.Uint16(4) Not_Applicable = pywbem.Uint16(5) Enabled_but_Offline = pywbem.Uint16(6) In_Test = pywbem.Uint16(7) Deferred = pywbem.Uint16(8) Quiesce = pywbem.Uint16(9) Starting = pywbem.Uint16(10) # DMTF_Reserved = 11..32767 # Vendor_Reserved = 32768..65535 class HealthState(object): Unknown = pywbem.Uint16(0) OK = pywbem.Uint16(5) Degraded_Warning = pywbem.Uint16(10) Minor_failure = pywbem.Uint16(15) Major_failure = pywbem.Uint16(20) Critical_failure = pywbem.Uint16(25) Non_recoverable_error = pywbem.Uint16(30) # DMTF_Reserved = .. # Vendor_Specific = 32768..65535 class OperationalStatus(object): Unknown = pywbem.Uint16(0) Other = pywbem.Uint16(1) OK = pywbem.Uint16(2) Degraded = pywbem.Uint16(3) Stressed = pywbem.Uint16(4) Predictive_Failure = pywbem.Uint16(5) Error = pywbem.Uint16(6) Non_Recoverable_Error = pywbem.Uint16(7) Starting = pywbem.Uint16(8) Stopping = pywbem.Uint16(9) Stopped = pywbem.Uint16(10) In_Service = pywbem.Uint16(11) No_Contact = pywbem.Uint16(12) Lost_Communication = pywbem.Uint16(13) Aborted = pywbem.Uint16(14) Dormant = pywbem.Uint16(15) Supporting_Entity_in_Error = pywbem.Uint16(16) Completed = pywbem.Uint16(17) Power_Mode = pywbem.Uint16(18) Relocating = pywbem.Uint16(19) # DMTF_Reserved = .. # Vendor_Reserved = 0x8000.. class PrimaryStatus(object): Unknown = pywbem.Uint16(0) OK = pywbem.Uint16(1) Degraded = pywbem.Uint16(2) Error = pywbem.Uint16(3) # DMTF_Reserved = .. # Vendor_Reserved = 0x8000.. class StartMode(object): Automatic = 'Automatic' Manual = 'Manual'