From e0a86ee1ae193f0622e4cf1a02fa9e84561f12f0 Mon Sep 17 00:00:00 2001 From: Michal Minar Date: Sat, 13 Oct 2012 21:53:35 +0200 Subject: renamed LMI_SoftwarePackage{File,Checks} corrected some corner cases, when getting/modifying instance with wrong or missing keys --- .../providers/LMI_SoftwareInstalledPackage.py | 32 ++- .../providers/LMI_SoftwarePackageChecks.py | 307 +++++++++++++++++++++ src/software/providers/LMI_SoftwarePackageFile.py | 301 -------------------- 3 files changed, 338 insertions(+), 302 deletions(-) create mode 100644 src/software/providers/LMI_SoftwarePackageChecks.py delete mode 100644 src/software/providers/LMI_SoftwarePackageFile.py (limited to 'src') diff --git a/src/software/providers/LMI_SoftwareInstalledPackage.py b/src/software/providers/LMI_SoftwareInstalledPackage.py index 008a47b..5b00508 100644 --- a/src/software/providers/LMI_SoftwareInstalledPackage.py +++ b/src/software/providers/LMI_SoftwareInstalledPackage.py @@ -69,6 +69,12 @@ class LMI_SoftwareInstalledPackage(CIMProvider2): logger.log_debug('Entering %s.get_instance()' \ % self.__class__.__name__) + if not "Software" in model: + raise pywbem.CIMError(pywbem.CIM_ERR_NOT_FOUND, + "Missing Software property.") + if not "System" in model: + raise pywbem.CIMError(pywbem.CIM_ERR_NOT_FOUND, + "Missing System property.") check_computer_system_op(env, model['System']) with YumDB.getInstance(env): pkg = SoftwarePackage.object_path2pkg(env, model['Software']) @@ -158,9 +164,15 @@ class LMI_SoftwareInstalledPackage(CIMProvider2): # parse and check arguments if modify_existing is True: - raise pywbem.CIMError(pywbem.CIM_ERR_NOT_FOUND, + raise pywbem.CIMError(pywbem.CIM_ERR_NOT_SUPPORTED, "MofifyInstance is not supported") + if not "Software" in instance: + raise pywbem.CIMError(pywbem.CIM_ERR_NOT_FOUND, + "Missing Software property.") + if not "System" in instance: + raise pywbem.CIMError(pywbem.CIM_ERR_NOT_FOUND, + "Missing System property.") check_computer_system_op(env, instance['System']) with YumDB.getInstance(env) as yb: @@ -209,6 +221,12 @@ class LMI_SoftwareInstalledPackage(CIMProvider2): logger.log_debug('Entering %s.delete_instance()' \ % self.__class__.__name__) + if not "Software" in instance_name: + raise pywbem.CIMError(pywbem.CIM_ERR_NOT_FOUND, + "Missing Software property.") + if not "System" in instance_name: + raise pywbem.CIMError(pywbem.CIM_ERR_NOT_FOUND, + "Missing System property.") check_computer_system_op(env, instance_name['System']) with YumDB.getInstance(env) as yb: pkg = SoftwarePackage.object_path2pkg(env, instance_name["Software"]) @@ -335,6 +353,12 @@ class LMI_SoftwareInstalledPackage(CIMProvider2): % self.__class__.__name__) failed = [] + if not "Software" in object_name: + raise pywbem.CIMError(pywbem.CIM_ERR_NOT_FOUND, + "Missing Software property.") + if not "System" in object_name: + raise pywbem.CIMError(pywbem.CIM_ERR_NOT_FOUND, + "Missing System property.") with YumDB.getInstance(env) as yb: pkg = SoftwarePackage.object_path2pkg(env, object_name['Software']) csum = SoftwareFileCheck.pkg_checksum_type(pkg) @@ -399,6 +423,12 @@ class LMI_SoftwareInstalledPackage(CIMProvider2): logger.log_debug('Entering %s.cim_method_update()' \ % self.__class__.__name__) + if not "Software" in object_name: + raise pywbem.CIMError(pywbem.CIM_ERR_NOT_FOUND, + "Missing Software property.") + if not "System" in object_name: + raise pywbem.CIMError(pywbem.CIM_ERR_NOT_FOUND, + "Missing System property.") check_computer_system_op(env, object_name['System']) with YumDB.getInstance(env) as yb: diff --git a/src/software/providers/LMI_SoftwarePackageChecks.py b/src/software/providers/LMI_SoftwarePackageChecks.py new file mode 100644 index 0000000..797e958 --- /dev/null +++ b/src/software/providers/LMI_SoftwarePackageChecks.py @@ -0,0 +1,307 @@ +# Software Management Providers +# +# Copyright (C) 2012 Red Hat, Inc. All rights reserved. +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program 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 General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + +"""Python Provider for LMI_SoftwarePackageChecks + +Instruments the CIM class LMI_SoftwarePackageChecks + +""" + +import pywbem +from pywbem.cim_provider2 import CIMProvider2 +from LMI_SoftwareFileCheck import filecheck2model +from LMI_SoftwarePackage import pkg2model +from util.common import * + +class LMI_SoftwarePackageChecks(CIMProvider2): + """Instrument the CIM class LMI_SoftwarePackageChecks + + This association ties a SoftwareElement to a specific Check to validate + its state or its movement to the next state. Note that + SoftwareElements in a running state cannot transition to another + state. Therefore, the value of the Phase property is restricted to 0 + ("In-State") for SoftwareElements in the running state. + + """ + + def __init__ (self, env): + logger = env.get_logger() + logger.log_debug('Initializing provider %s from %s' \ + % (self.__class__.__name__, __file__)) + + def get_instance(self, env, model): + """Return an instance. + + Keyword arguments: + env -- Provider Environment (pycimmb.ProviderEnvironment) + model -- A template of the pywbem.CIMInstance to be returned. The + key properties are set on this instance to correspond to the + instanceName that was requested. The properties of the model + are already filtered according to the PropertyList from the + request. Only properties present in the model need to be + given values. If you prefer, you can set all of the + values, and the instance will be filtered for you. + + Possible Errors: + CIM_ERR_ACCESS_DENIED + CIM_ERR_INVALID_PARAMETER (including missing, duplicate, unrecognized + or otherwise incorrect parameters) + CIM_ERR_NOT_FOUND (the CIM Class does exist, but the requested CIM + Instance does not exist in the specified namespace) + CIM_ERR_FAILED (some other unspecified error occurred) + + """ + + logger = env.get_logger() + logger.log_debug('Entering %s.get_instance()' \ + % self.__class__.__name__) + + if not "Check" in model: + raise pywbem.CIMError(pywbem.CIM_ERR_NOT_FOUND, + "Missing Check property.") + if not "Element" in model: + raise pywbem.CIMError(pywbem.CIM_ERR_NOT_FOUND, + "Missing Element property.") + vpkg = SoftwareFileCheck.object_path2yumcheck(env, model['Check']) + model['Check'] = filecheck2model(vpkg, model['Check']['Name'], + env, keys_only=True) + model['Element'] = pkg2model(env, vpkg.po, keys_only=True) + return model + + def enum_instances(self, env, model, keys_only): + """Enumerate instances. + + The WBEM operations EnumerateInstances and EnumerateInstanceNames + are both mapped to this method. + This method is a python generator + + Keyword arguments: + env -- Provider Environment (pycimmb.ProviderEnvironment) + model -- A template of the pywbem.CIMInstances to be generated. + The properties of the model are already filtered according to + the PropertyList from the request. Only properties present in + the model need to be given values. If you prefer, you can + always set all of the values, and the instance will be filtered + for you. + keys_only -- A boolean. True if only the key properties should be + set on the generated instances. + + Possible Errors: + CIM_ERR_FAILED (some other unspecified error occurred) + + """ + + logger = env.get_logger() + logger.log_debug('Entering %s.enum_instances()' \ + % self.__class__.__name__) + + # Prime model.path with knowledge of the keys, so key values on + # the CIMInstanceName (model.path) will automatically be set when + # we set property values on the model. + model.path.update({'Check': None, 'Element': None}) + + while False: # TODO more instances? + # TODO fetch system resource + # Key properties + #model['Check'] = pywbem.CIMInstanceName(classname='LMI_SoftwareFileCheck', ...) # TODO (type = REF (pywbem.CIMInstanceName(classname='LMI_SoftwareFileCheck', ...)) + #model['Element'] = pywbem.CIMInstanceName(classname='LMI_SoftwarePackage', ...) # TODO (type = REF (pywbem.CIMInstanceName(classname='LMI_SoftwarePackage', ...)) + if keys_only: + yield model + else: + try: + yield self.get_instance(env, model) + except pywbem.CIMError, (num, msg): + if num not in (pywbem.CIM_ERR_NOT_FOUND, + pywbem.CIM_ERR_ACCESS_DENIED): + raise + + def set_instance(self, env, instance, modify_existing): + """Return a newly created or modified instance. + + Keyword arguments: + env -- Provider Environment (pycimmb.ProviderEnvironment) + instance -- The new pywbem.CIMInstance. If modifying an existing + instance, the properties on this instance have been filtered by + the PropertyList from the request. + modify_existing -- True if ModifyInstance, False if CreateInstance + + Return the new instance. The keys must be set on the new instance. + + Possible Errors: + CIM_ERR_ACCESS_DENIED + CIM_ERR_NOT_SUPPORTED + CIM_ERR_INVALID_PARAMETER (including missing, duplicate, unrecognized + or otherwise incorrect parameters) + CIM_ERR_ALREADY_EXISTS (the CIM Instance already exists -- only + valid if modify_existing is False, indicating that the operation + was CreateInstance) + CIM_ERR_NOT_FOUND (the CIM Instance does not exist -- only valid + if modify_existing is True, indicating that the operation + was ModifyInstance) + CIM_ERR_FAILED (some other unspecified error occurred) + + """ + + logger = env.get_logger() + logger.log_debug('Entering %s.set_instance()' \ + % self.__class__.__name__) + # TODO create or modify the instance + raise pywbem.CIMError(pywbem.CIM_ERR_NOT_SUPPORTED) # Remove to implement + return instance + + def delete_instance(self, env, instance_name): + """Delete an instance. + + Keyword arguments: + env -- Provider Environment (pycimmb.ProviderEnvironment) + instance_name -- A pywbem.CIMInstanceName specifying the instance + to delete. + + Possible Errors: + CIM_ERR_ACCESS_DENIED + CIM_ERR_NOT_SUPPORTED + CIM_ERR_INVALID_NAMESPACE + CIM_ERR_INVALID_PARAMETER (including missing, duplicate, unrecognized + or otherwise incorrect parameters) + CIM_ERR_INVALID_CLASS (the CIM Class does not exist in the specified + namespace) + CIM_ERR_NOT_FOUND (the CIM Class does exist, but the requested CIM + Instance does not exist in the specified namespace) + CIM_ERR_FAILED (some other unspecified error occurred) + + """ + + logger = env.get_logger() + logger.log_debug('Entering %s.delete_instance()' \ + % self.__class__.__name__) + + # TODO delete the resource + raise pywbem.CIMError(pywbem.CIM_ERR_NOT_SUPPORTED) # Remove to implement + + def references(self, env, object_name, model, result_class_name, role, + result_role, keys_only): + """Instrument Associations. + + All four association-related operations (Associators, AssociatorNames, + References, ReferenceNames) are mapped to this method. + This method is a python generator + + Keyword arguments: + env -- Provider Environment (pycimmb.ProviderEnvironment) + object_name -- A pywbem.CIMInstanceName that defines the source + CIM Object whose associated Objects are to be returned. + model -- A template pywbem.CIMInstance to serve as a model + of the objects to be returned. Only properties present on this + model need to be set. + result_class_name -- If not empty, this string acts as a filter on + the returned set of Instances by mandating that each returned + Instances MUST represent an association between object_name + and an Instance of a Class whose name matches this parameter + or a subclass. + role -- If not empty, MUST be a valid Property name. It acts as a + filter on the returned set of Instances by mandating that each + returned Instance MUST refer to object_name via a Property + whose name matches the value of this parameter. + result_role -- If not empty, MUST be a valid Property name. It acts + as a filter on the returned set of Instances by mandating that + each returned Instance MUST represent associations of + object_name to other Instances, where the other Instances play + the specified result_role in the association (i.e. the + name of the Property in the Association Class that refers to + the Object related to object_name MUST match the value of this + parameter). + keys_only -- A boolean. True if only the key properties should be + set on the generated instances. + + The following diagram may be helpful in understanding the role, + result_role, and result_class_name parameters. + +------------------------+ +-------------------+ + | object_name.classname | | result_class_name | + | ~~~~~~~~~~~~~~~~~~~~~ | | ~~~~~~~~~~~~~~~~~ | + +------------------------+ +-------------------+ + | +-----------------------------------+ | + | | [Association] model.classname | | + | object_name | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | | + +--------------+ object_name.classname REF role | | + (CIMInstanceName) | result_class_name REF result_role +------+ + | |(CIMInstanceName) + +-----------------------------------+ + + Possible Errors: + CIM_ERR_ACCESS_DENIED + CIM_ERR_NOT_SUPPORTED + CIM_ERR_INVALID_NAMESPACE + CIM_ERR_INVALID_PARAMETER (including missing, duplicate, unrecognized + or otherwise incorrect parameters) + CIM_ERR_FAILED (some other unspecified error occurred) + + """ + + logger = env.get_logger() + logger.log_debug('Entering %s.references()' \ + % self.__class__.__name__) + ch = env.get_cimom_handle() + + # Prime model.path with knowledge of the keys, so key values on + # the CIMInstanceName (model.path) will automatically be set when + # we set property values on the model. + model.path.update({'Check': None, 'Element': None}) + + with YumDB.getInstance(env): + if ( (not role or role.lower() == 'element') + and ch.is_subclass(object_name.namespace, + sub=object_name.classname, + super='LMI_SoftwarePackage')): + filecheck_model = pywbem.CIMInstanceName( + classname='LMI_SoftwareFileCheck', + namespace="root/cimv2", + host=model.path.host) + model['Element'] = object_name + + pkg = SoftwarePackage.object_path2pkg(env, object_name) + vpkg = yum.packages._RPMVerifyPackage( + pkg, pkg.hdr.fiFromHeader(), + SoftwareFileCheck.pkg_checksum_type(pkg), [], True) + for fc in vpkg: + model['Check'] = filecheck2model( + vpkg, fc.filename, env, keys_only=True, + model=filecheck_model) + yield model + + if ( (not role or role.lower() == 'check') + and ch.is_subclass(object_name.namespace, + sub=object_name.classname, + super='LMI_SoftwareFileCheck')): + model['Check'] = object_name + + vpkg = SoftwareFileCheck.object_path2yumcheck(env, object_name) + model['Element'] = pkg2model( + env, vpkg.po, keys_only=True) + yield model + + class Values(object): + class Phase(object): + In_State = pywbem.Uint16(0) + Next_State = pywbem.Uint16(1) + +## end of class LMI_SoftwarePackageChecksProvider + +## get_providers() for associating CIM Class Name to python provider class name + +def get_providers(env): + lmi_softwarepackagechecks_prov = LMI_SoftwarePackageChecks(env) + return {'LMI_SoftwarePackageChecks': lmi_softwarepackagechecks_prov} diff --git a/src/software/providers/LMI_SoftwarePackageFile.py b/src/software/providers/LMI_SoftwarePackageFile.py deleted file mode 100644 index 389dbbf..0000000 --- a/src/software/providers/LMI_SoftwarePackageFile.py +++ /dev/null @@ -1,301 +0,0 @@ -# Software Management Providers -# -# Copyright (C) 2012 Red Hat, Inc. All rights reserved. -# -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2 of the License, or -# (at your option) any later version. -# -# This program 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 General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program. If not, see . - -"""Python Provider for LMI_SoftwarePackageFile - -Instruments the CIM class LMI_SoftwarePackageFile - -""" - -import pywbem -from pywbem.cim_provider2 import CIMProvider2 -from LMI_SoftwareFileCheck import filecheck2model -from LMI_SoftwarePackage import pkg2model -from util.common import * - -class LMI_SoftwarePackageFile(CIMProvider2): - """Instrument the CIM class LMI_SoftwarePackageFile - - This association ties a SoftwareElement to a specific Check to validate - its state or its movement to the next state. Note that - SoftwareElements in a running state cannot transition to another - state. Therefore, the value of the Phase property is restricted to 0 - ("In-State") for SoftwareElements in the running state. - - """ - - def __init__ (self, env): - logger = env.get_logger() - logger.log_debug('Initializing provider %s from %s' \ - % (self.__class__.__name__, __file__)) - - def get_instance(self, env, model): - """Return an instance. - - Keyword arguments: - env -- Provider Environment (pycimmb.ProviderEnvironment) - model -- A template of the pywbem.CIMInstance to be returned. The - key properties are set on this instance to correspond to the - instanceName that was requested. The properties of the model - are already filtered according to the PropertyList from the - request. Only properties present in the model need to be - given values. If you prefer, you can set all of the - values, and the instance will be filtered for you. - - Possible Errors: - CIM_ERR_ACCESS_DENIED - CIM_ERR_INVALID_PARAMETER (including missing, duplicate, unrecognized - or otherwise incorrect parameters) - CIM_ERR_NOT_FOUND (the CIM Class does exist, but the requested CIM - Instance does not exist in the specified namespace) - CIM_ERR_FAILED (some other unspecified error occurred) - - """ - - logger = env.get_logger() - logger.log_debug('Entering %s.get_instance()' \ - % self.__class__.__name__) - - vpkg = SoftwareFileCheck.object_path2yumcheck(env, model['Check']) - model['Check'] = filecheck2model(vpkg, model['Check']['Name'], - env, keys_only=True) - model['Element'] = pkg2model(env, vpkg.po, keys_only=True) - return model - - def enum_instances(self, env, model, keys_only): - """Enumerate instances. - - The WBEM operations EnumerateInstances and EnumerateInstanceNames - are both mapped to this method. - This method is a python generator - - Keyword arguments: - env -- Provider Environment (pycimmb.ProviderEnvironment) - model -- A template of the pywbem.CIMInstances to be generated. - The properties of the model are already filtered according to - the PropertyList from the request. Only properties present in - the model need to be given values. If you prefer, you can - always set all of the values, and the instance will be filtered - for you. - keys_only -- A boolean. True if only the key properties should be - set on the generated instances. - - Possible Errors: - CIM_ERR_FAILED (some other unspecified error occurred) - - """ - - logger = env.get_logger() - logger.log_debug('Entering %s.enum_instances()' \ - % self.__class__.__name__) - - # Prime model.path with knowledge of the keys, so key values on - # the CIMInstanceName (model.path) will automatically be set when - # we set property values on the model. - model.path.update({'Check': None, 'Element': None}) - - while False: # TODO more instances? - # TODO fetch system resource - # Key properties - #model['Check'] = pywbem.CIMInstanceName(classname='LMI_SoftwareFileCheck', ...) # TODO (type = REF (pywbem.CIMInstanceName(classname='LMI_SoftwareFileCheck', ...)) - #model['Element'] = pywbem.CIMInstanceName(classname='LMI_SoftwarePackage', ...) # TODO (type = REF (pywbem.CIMInstanceName(classname='LMI_SoftwarePackage', ...)) - if keys_only: - yield model - else: - try: - yield self.get_instance(env, model) - except pywbem.CIMError, (num, msg): - if num not in (pywbem.CIM_ERR_NOT_FOUND, - pywbem.CIM_ERR_ACCESS_DENIED): - raise - - def set_instance(self, env, instance, modify_existing): - """Return a newly created or modified instance. - - Keyword arguments: - env -- Provider Environment (pycimmb.ProviderEnvironment) - instance -- The new pywbem.CIMInstance. If modifying an existing - instance, the properties on this instance have been filtered by - the PropertyList from the request. - modify_existing -- True if ModifyInstance, False if CreateInstance - - Return the new instance. The keys must be set on the new instance. - - Possible Errors: - CIM_ERR_ACCESS_DENIED - CIM_ERR_NOT_SUPPORTED - CIM_ERR_INVALID_PARAMETER (including missing, duplicate, unrecognized - or otherwise incorrect parameters) - CIM_ERR_ALREADY_EXISTS (the CIM Instance already exists -- only - valid if modify_existing is False, indicating that the operation - was CreateInstance) - CIM_ERR_NOT_FOUND (the CIM Instance does not exist -- only valid - if modify_existing is True, indicating that the operation - was ModifyInstance) - CIM_ERR_FAILED (some other unspecified error occurred) - - """ - - logger = env.get_logger() - logger.log_debug('Entering %s.set_instance()' \ - % self.__class__.__name__) - # TODO create or modify the instance - raise pywbem.CIMError(pywbem.CIM_ERR_NOT_SUPPORTED) # Remove to implement - return instance - - def delete_instance(self, env, instance_name): - """Delete an instance. - - Keyword arguments: - env -- Provider Environment (pycimmb.ProviderEnvironment) - instance_name -- A pywbem.CIMInstanceName specifying the instance - to delete. - - Possible Errors: - CIM_ERR_ACCESS_DENIED - CIM_ERR_NOT_SUPPORTED - CIM_ERR_INVALID_NAMESPACE - CIM_ERR_INVALID_PARAMETER (including missing, duplicate, unrecognized - or otherwise incorrect parameters) - CIM_ERR_INVALID_CLASS (the CIM Class does not exist in the specified - namespace) - CIM_ERR_NOT_FOUND (the CIM Class does exist, but the requested CIM - Instance does not exist in the specified namespace) - CIM_ERR_FAILED (some other unspecified error occurred) - - """ - - logger = env.get_logger() - logger.log_debug('Entering %s.delete_instance()' \ - % self.__class__.__name__) - - # TODO delete the resource - raise pywbem.CIMError(pywbem.CIM_ERR_NOT_SUPPORTED) # Remove to implement - - def references(self, env, object_name, model, result_class_name, role, - result_role, keys_only): - """Instrument Associations. - - All four association-related operations (Associators, AssociatorNames, - References, ReferenceNames) are mapped to this method. - This method is a python generator - - Keyword arguments: - env -- Provider Environment (pycimmb.ProviderEnvironment) - object_name -- A pywbem.CIMInstanceName that defines the source - CIM Object whose associated Objects are to be returned. - model -- A template pywbem.CIMInstance to serve as a model - of the objects to be returned. Only properties present on this - model need to be set. - result_class_name -- If not empty, this string acts as a filter on - the returned set of Instances by mandating that each returned - Instances MUST represent an association between object_name - and an Instance of a Class whose name matches this parameter - or a subclass. - role -- If not empty, MUST be a valid Property name. It acts as a - filter on the returned set of Instances by mandating that each - returned Instance MUST refer to object_name via a Property - whose name matches the value of this parameter. - result_role -- If not empty, MUST be a valid Property name. It acts - as a filter on the returned set of Instances by mandating that - each returned Instance MUST represent associations of - object_name to other Instances, where the other Instances play - the specified result_role in the association (i.e. the - name of the Property in the Association Class that refers to - the Object related to object_name MUST match the value of this - parameter). - keys_only -- A boolean. True if only the key properties should be - set on the generated instances. - - The following diagram may be helpful in understanding the role, - result_role, and result_class_name parameters. - +------------------------+ +-------------------+ - | object_name.classname | | result_class_name | - | ~~~~~~~~~~~~~~~~~~~~~ | | ~~~~~~~~~~~~~~~~~ | - +------------------------+ +-------------------+ - | +-----------------------------------+ | - | | [Association] model.classname | | - | object_name | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | | - +--------------+ object_name.classname REF role | | - (CIMInstanceName) | result_class_name REF result_role +------+ - | |(CIMInstanceName) - +-----------------------------------+ - - Possible Errors: - CIM_ERR_ACCESS_DENIED - CIM_ERR_NOT_SUPPORTED - CIM_ERR_INVALID_NAMESPACE - CIM_ERR_INVALID_PARAMETER (including missing, duplicate, unrecognized - or otherwise incorrect parameters) - CIM_ERR_FAILED (some other unspecified error occurred) - - """ - - logger = env.get_logger() - logger.log_debug('Entering %s.references()' \ - % self.__class__.__name__) - ch = env.get_cimom_handle() - - # Prime model.path with knowledge of the keys, so key values on - # the CIMInstanceName (model.path) will automatically be set when - # we set property values on the model. - model.path.update({'Check': None, 'Element': None}) - - with YumDB.getInstance(env): - if ( (not role or role.lower() == 'element') - and ch.is_subclass(object_name.namespace, - sub=object_name.classname, - super='LMI_SoftwarePackage')): - filecheck_model = pywbem.CIMInstanceName( - classname='LMI_SoftwareFileCheck', - namespace="root/cimv2", - host=model.path.host) - model['Element'] = object_name - - pkg = SoftwarePackage.object_path2pkg(env, object_name) - vpkg = yum.packages._RPMVerifyPackage( - pkg, pkg.hdr.fiFromHeader(), - SoftwareFileCheck.pkg_checksum_type(pkg), [], True) - for fc in vpkg: - model['Check'] = filecheck2model( - vpkg, fc.filename, env, keys_only=True, - model=filecheck_model) - yield model - - if ( (not role or role.lower() == 'check') - and ch.is_subclass(object_name.namespace, - sub=object_name.classname, - super='LMI_SoftwareFileCheck')): - model['Check'] = object_name - - vpkg = SoftwareFileCheck.object_path2yumcheck(env, object_name) - model['Element'] = pkg2model( - env, vpkg.po, keys_only=True) - yield model - - class Values(object): - class Phase(object): - In_State = pywbem.Uint16(0) - Next_State = pywbem.Uint16(1) - -## end of class LMI_SoftwarePackageFileProvider - -## get_providers() for associating CIM Class Name to python provider class name - -def get_providers(env): - lmi_softwarepackagefile_prov = LMI_SoftwarePackageFile(env) - return {'LMI_SoftwarePackageFile': lmi_softwarepackagefile_prov} -- cgit