You can subscribe to this list here.
2006 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
(26) |
Dec
(13) |
---|---|---|---|---|---|---|---|---|---|---|---|---|
2007 |
Jan
(5) |
Feb
(16) |
Mar
(5) |
Apr
(5) |
May
(13) |
Jun
(12) |
Jul
(1) |
Aug
(2) |
Sep
(13) |
Oct
(6) |
Nov
(1) |
Dec
(29) |
2008 |
Jan
(2) |
Feb
(2) |
Mar
(2) |
Apr
(57) |
May
(35) |
Jun
(45) |
Jul
(132) |
Aug
(87) |
Sep
(141) |
Oct
(86) |
Nov
(17) |
Dec
(2) |
2009 |
Jan
(3) |
Feb
(2) |
Mar
(3) |
Apr
(3) |
May
(1) |
Jun
|
Jul
|
Aug
(1) |
Sep
|
Oct
|
Nov
(1) |
Dec
|
2010 |
Jan
(2) |
Feb
|
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
(1) |
Sep
|
Oct
|
Nov
|
Dec
|
From: <np...@us...> - 2008-09-22 19:54:34
|
Revision: 1028 http://omc.svn.sourceforge.net/omc/?rev=1028&view=rev Author: npaxton Date: 2008-09-22 19:54:28 +0000 (Mon, 22 Sep 2008) Log Message: ----------- got enable/disableIndications support Modified Paths: -------------- cmpi-bindings/trunk/swig/python/cmpi_pywbem_bindings.py Modified: cmpi-bindings/trunk/swig/python/cmpi_pywbem_bindings.py =================================================================== --- cmpi-bindings/trunk/swig/python/cmpi_pywbem_bindings.py 2008-09-20 00:27:47 UTC (rev 1027) +++ cmpi-bindings/trunk/swig/python/cmpi_pywbem_bindings.py 2008-09-22 19:54:28 UTC (rev 1028) @@ -402,9 +402,10 @@ filt = self.cmpi2pywbem_selectexp(filter) classpath = self.cmpi2pywbem_instname(classPath) try: - rv = self.proxy.MI_authorizeFilter(env, + self.proxy.MI_authorizeFilter(env, filt, className, classpath, owner) except pywbem.CIMError, args: + #expect an exception if not success return args[:2] return (0, '') @@ -415,9 +416,10 @@ filt = self.cmpi2pywbem_selectexp(filter) classpath = self.cmpi2pywbem_instname(classPath) try: - rv = self.proxy.MI_activateFilter(env, + self.proxy.MI_activateFilter(env, filt, className, classpath, firstActivation) except pywbem.CIMError, args: + #expect an exception if not success return args[:2] return (0, '') @@ -428,9 +430,10 @@ filt = self.cmpi2pywbem_selectexp(filter) classpath = self.cmpi2pywbem_instname(classPath) try: - rv = self.proxy.MI_activateFilter(env, + self.proxy.MI_deActivateFilter(env, filt, className, classpath, lastActivation) except pywbem.CIMError, args: + #expect an exception if not success return args[:2] return (0, '') @@ -455,14 +458,26 @@ def enable_indications(self, ctx): - #env = ProviderEnvironment(self, ctx) - pass + env = ProviderEnvironment(self, ctx) + try: + self.proxy.MI_enableIndications(env) + except pywbem.CIMError, args: + #expect an exception if not success + return args[:2] + return (0, '') + def disable_indications(self, ctx): - #env = ProviderEnvironment(self, ctx) - pass + env = ProviderEnvironment(self, ctx) + try: + self.proxy.MI_disableIndications(env) + except pywbem.CIMError, args: + #expect an exception if not success + return args[:2] + return (0, '') + def cmpi2pywbem_inst(self, cmpiinst): cop = self.cmpi2pywbem_instname(cmpiinst.objectpath()) props = {} This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <mik...@us...> - 2008-09-20 00:27:54
|
Revision: 1027 http://omc.svn.sourceforge.net/omc/?rev=1027&view=rev Author: mike-brasher Date: 2008-09-20 00:27:47 +0000 (Sat, 20 Sep 2008) Log Message: ----------- Support infrastructure for CMPIStatus to python exception translation. Modified Paths: -------------- cmpi-bindings/trunk/swig/cmpi.i cmpi-bindings/trunk/swig/cmpi_callbacks.i cmpi-bindings/trunk/swig/python/cmpi_pywbem_bindings.py cmpi-bindings/trunk/test/python/TestMethod.py cmpi-bindings/trunk/test/python/setup.sh Added Paths: ----------- cmpi-bindings/trunk/install.sh Removed Paths: ------------- cmpi-bindings/trunk/register.sh Added: cmpi-bindings/trunk/install.sh =================================================================== --- cmpi-bindings/trunk/install.sh (rev 0) +++ cmpi-bindings/trunk/install.sh 2008-09-20 00:27:47 UTC (rev 1027) @@ -0,0 +1,47 @@ +#!/bin/sh + +## +## Check usage +## + +if [ "$#" != 1 ]; then + echo "Usage: $0 [op|sfcb]" + exit 1 +fi + +if [ "$1" != "op" -a "$1" != "sfcb" ]; then + echo "Usage: $0 [op|sfcb]" + exit 1 +fi + +## +## Install python provider infrastructure implementation. +## + +PKGS=/usr/lib64/python2.5/site-packages +cp ./build/swig/python/cmpi.py $PKGS +cp ./swig/python/cim_provider.py $PKGS +cp ./swig/python/cmpi_pywbem_bindings.py $PKGS + +## +## Install provider shared library. +## + +SO=./build/swig/python/libpyCmpiProvider.so + +if [ ! -f "$SO" ]; then + echo "$0: no such file: $SO" + exit 1 +fi + +if [ "$1" = "op" ]; then + if [ ! -d "$PEGASUS_PROVIDER_DIR" ]; then + echo "Please define PEGASUS_PROVIDER_DIR" + fi + echo "cp $SO $PEGASUS_PROVIDER_DIR" + cp $SO $PEGASUS_PROVIDER_DIR +fi + +if [ "$1" = "sfcb" ]; then + cp $SO /usr/lib64/ +fi Property changes on: cmpi-bindings/trunk/install.sh ___________________________________________________________________ Added: svn:executable + * Deleted: cmpi-bindings/trunk/register.sh =================================================================== --- cmpi-bindings/trunk/register.sh 2008-09-19 23:16:05 UTC (rev 1026) +++ cmpi-bindings/trunk/register.sh 2008-09-20 00:27:47 UTC (rev 1027) @@ -1,7 +0,0 @@ -#!/bin/sh -cp ./build/swig/python/cmpi.py ./swig/python/cim_provider.py ./swig/python/cmpi_bindings.py /usr/lib64/python2.5/site-packages -cp ./mof/Py_UnixProcess.reg /var/lib/sfcb/stage/regs -cp ./mof/Py_UnixProcess.mof /var/lib/sfcb/stage/mofs/root/cimv2 -cp ./build/swig/python/libpyCmpiProvider.so /usr/lib64/ -cp ./swig/python/Py_UnixProcessProvider.py /usr/lib/pycim -sfcbrepos -f Modified: cmpi-bindings/trunk/swig/cmpi.i =================================================================== --- cmpi-bindings/trunk/swig/cmpi.i 2008-09-19 23:16:05 UTC (rev 1026) +++ cmpi-bindings/trunk/swig/cmpi.i 2008-09-20 00:27:47 UTC (rev 1027) @@ -14,7 +14,17 @@ /* CMPI platform check */ #include <cmpipl.h> +#include <pthread.h> +/* CMPIException */ +struct _CMPIException +{ + int error_code; + char* description; +}; + +typedef struct _CMPIException CMPIException; + static CMPIData * clone_data(const CMPIData *dp) { @@ -24,6 +34,39 @@ } /* + * raise_exception() + */ + +pthread_once_t _once = PTHREAD_ONCE_INIT; + +static void* _get_raised() +{ + return pthread_getspecific(_once); +} + +static void _set_raised() +{ + static const char _data[] = "dummy string"; + pthread_setspecific(_once, (void*)_data); +} + +static void _clr_raised() +{ + pthread_setspecific(_once, NULL); +} + +void raise_exception(int error_code, const char* description) +{ + char buffer[1024]; + sprintf(buffer, "%d:%s", error_code, description); + + SWIG_PYTHON_THREAD_BEGIN_BLOCK; + PyErr_SetString(PyExc_RuntimeError, buffer); + SWIG_PYTHON_THREAD_END_BLOCK; + _set_raised(); +} + +/* * provider code */ @@ -45,4 +88,3 @@ # Broker callbacks %include "cmpi_callbacks.i" - Modified: cmpi-bindings/trunk/swig/cmpi_callbacks.i =================================================================== --- cmpi-bindings/trunk/swig/cmpi_callbacks.i 2008-09-19 23:16:05 UTC (rev 1026) +++ cmpi-bindings/trunk/swig/cmpi_callbacks.i 2008-09-20 00:27:47 UTC (rev 1027) @@ -7,6 +7,16 @@ %rename(CMPIBroker) CMPIBroker; typedef struct _CMPIBroker {} CMPIBroker; +%exception { + _clr_raised(); + $action + if (_get_raised()) + { + _clr_raised(); + SWIG_PYTHON_THREAD_END_ALLOW; + SWIG_fail; + } +} %extend CMPIBroker { void LogMessage(int severity, const char *id, const char *text) { @@ -143,5 +153,37 @@ cimStatusCode, NULL); } + void oops() + { + raise_exception(99, "oops"); + } } +#----------------------------------------------------- +# +# CMPIException +# + +%nodefault _CMPIException; +%rename(CMPIException) CMPIException; +typedef struct _CMPIException {} CMPIException; + +%extend CMPIException { + + CMPIException() { + return (CMPIException*)calloc(1, sizeof(CMPIException)); + } + + ~CMPIException() { + free($self->description); + } + + int error_code() { + return $self->error_code; + } + + const char* get_description() { + return $self->description; + } +} + Modified: cmpi-bindings/trunk/swig/python/cmpi_pywbem_bindings.py =================================================================== --- cmpi-bindings/trunk/swig/python/cmpi_pywbem_bindings.py 2008-09-19 23:16:05 UTC (rev 1026) +++ cmpi-bindings/trunk/swig/python/cmpi_pywbem_bindings.py 2008-09-20 00:27:47 UTC (rev 1027) @@ -175,6 +175,8 @@ subObjPath=self.broker.new_object_path(ns, sub) return bool(self.broker.classPathIsA(subObjPath,super)) + def oops(self): + self.broker.oops() class Logger(object): def __init__(self, broker): Modified: cmpi-bindings/trunk/test/python/TestMethod.py =================================================================== --- cmpi-bindings/trunk/test/python/TestMethod.py 2008-09-19 23:16:05 UTC (rev 1026) +++ cmpi-bindings/trunk/test/python/TestMethod.py 2008-09-20 00:27:47 UTC (rev 1027) @@ -61,6 +61,18 @@ print inst ''' + ''' + ch = env.get_cimom_handle() + print "BEFORE" + + try: + ch.oops() + except RuntimeError: + print "CAUGHT" + + print "AFTER" + ''' + for key in g_insts.keys(): model['id'] = key model.path['id'] = key Modified: cmpi-bindings/trunk/test/python/setup.sh =================================================================== --- cmpi-bindings/trunk/test/python/setup.sh 2008-09-19 23:16:05 UTC (rev 1026) +++ cmpi-bindings/trunk/test/python/setup.sh 2008-09-20 00:27:47 UTC (rev 1027) @@ -21,16 +21,42 @@ ln -s `pwd`/$fn $dir } -__install TestMethod.mof /var/lib/sfcb/stage/mofs/root/cimv2 -__install TestAssoc.mof /var/lib/sfcb/stage/mofs/root/cimv2 -__install TestAtom.mof /var/lib/sfcb/stage/mofs/root/cimv2 +## +## Check usage +## +if [ "$#" != 1 ]; then + echo "Usage: $0 [op|sfcb]" + exit 1 +fi + +if [ "$1" != "op" -a "$1" != "sfcb" ]; then + echo "Usage: $0 [op|sfcb]" + exit 1 +fi + +## +## Install python providers: +## + __install TestMethod.py /usr/lib/pycim __install TestAssocProvider.py /usr/lib/pycim __install TestAtomProvider.py /usr/lib/pycim -__install TestAssocProvider.sfcb.reg /var/lib/sfcb/stage/regs -__install TestMethod.sfcb.reg /var/lib/sfcb/stage/regs -__install TestAtomProvider.sfcb.reg /var/lib/sfcb/stage/regs +if [ "$1" = "op" ]; then + cimmof TestMethod.mof + cimmof -n root/PG_InterOp TestMethod.peg.reg + cimmof TestAssoc.mof + cimmof -n root/PG_InterOp TestAssocProvider-peg.reg + cimmof TestAtom.mof + cimmof -n root/PG_InterOp TestAtomProvider.peg.reg +else + __install TestMethod.mof /var/lib/sfcb/stage/mofs/root/cimv2 + __install TestAssoc.mof /var/lib/sfcb/stage/mofs/root/cimv2 + __install TestAtom.mof /var/lib/sfcb/stage/mofs/root/cimv2 -sfcbrepos -f + __install TestAssocProvider.sfcb.reg /var/lib/sfcb/stage/regs + __install TestMethod.sfcb.reg /var/lib/sfcb/stage/regs + __install TestAtomProvider.sfcb.reg /var/lib/sfcb/stage/regs + sfcbrepos -f +fi This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <kk...@us...> - 2008-09-19 03:18:17
|
Revision: 1022 http://omc.svn.sourceforge.net/omc/?rev=1022&view=rev Author: kkaempf Date: 2008-09-19 10:18:27 +0000 (Fri, 19 Sep 2008) Log Message: ----------- sync with OpenSUSE buildservice Modified Paths: -------------- cmpi-bindings/trunk/package/cmpi-bindings.changes Modified: cmpi-bindings/trunk/package/cmpi-bindings.changes =================================================================== --- cmpi-bindings/trunk/package/cmpi-bindings.changes 2008-09-19 03:40:51 UTC (rev 1021) +++ cmpi-bindings/trunk/package/cmpi-bindings.changes 2008-09-19 10:18:27 UTC (rev 1022) @@ -6,6 +6,12 @@ packages. ------------------------------------------------------------------- +Mon Sep 15 20:38:55 MDT 2008 - bwh...@su... + +- Refactered broker wrapping. +- Lots of cleanup. + +------------------------------------------------------------------- Thu Sep 11 15:29:08 CEST 2008 - kk...@su... - Support Python threads, do proper locking This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ba...@us...> - 2008-09-18 20:40:42
|
Revision: 1021 http://omc.svn.sourceforge.net/omc/?rev=1021&view=rev Author: bartw Date: 2008-09-19 03:40:51 +0000 (Fri, 19 Sep 2008) Log Message: ----------- dev checkpoint Modified Paths: -------------- pyprofiles/powerManagement/trunk/OMC_AssociatedPowerManagementService.py pyprofiles/powerManagement/trunk/OMC_PowerManagementCapabilities.py pyprofiles/powerManagement/trunk/OMC_PowerManagementService.py Modified: pyprofiles/powerManagement/trunk/OMC_AssociatedPowerManagementService.py =================================================================== --- pyprofiles/powerManagement/trunk/OMC_AssociatedPowerManagementService.py 2008-09-18 20:27:15 UTC (rev 1020) +++ pyprofiles/powerManagement/trunk/OMC_AssociatedPowerManagementService.py 2008-09-19 03:40:51 UTC (rev 1021) @@ -4,8 +4,10 @@ """ +import os import pywbem from pywbem.cim_provider2 import CIMProvider2 +from datetime import datetime, timedelta import OMC_PowerManagementService get_service_path = OMC_PowerManagementService.get_path @@ -13,6 +15,34 @@ from socket import getfqdn +from OMC_UnixProcess import LinuxProcess + +def get_shutdown_time(): + try: + fo = open('/var/run/shutdown.pid', 'r') + except IOError: + return None + spid = fo.read().strip() + fo.close() + lp = LinuxProcess(spid) + if lp.get_module_path() != '/sbin/shutdown': + return None + proc_start = lp.get_start_time() + cmdline = lp.get_command_line() + if cmdline[-1][0] == '+': + targ = cmdline[-1] + elif cmdline[-2][0] == '+': + targ = cmdline[-2] + else: + return None + if targ[0] == '+': + minutes = int(targ[1:]) + ndt = proc_start.datetime + timedelta(minutes=minutes) + return pywbem.CIMDateTime(ndt) + return None + + + class OMC_AssociatedPowerManagementService(CIMProvider2): """Instrument the CIM class OMC_AssociatedPowerManagementService @@ -27,27 +57,6 @@ % (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()' \ @@ -60,34 +69,18 @@ #model['OtherPowerState'] = '' # TODO #model['OtherRequestedPowerState'] = '' # TODO - #model['PowerOnTime'] = pywbem.CIMDateTime() # TODO + shutdowntime = get_shutdown_time() + model['PowerOnTime'] = pywbem.CIMProperty('PowerOnTime', + value=shutdowntime, type='datetime') + if shutdowntime is not None: + model['RequestedPowerState'] = self.Values.RequestedPowerState.Power_Cycle__Off___Soft_Graceful_ + else: + model['RequestedPowerState'] = self.Values.RequestedPowerState.Not_Applicable model['PowerState'] = self.Values.PowerState.On - #model['RequestedPowerState'] = self.Values.RequestedPowerState.Not_Applicable # TODO 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__) @@ -121,32 +114,7 @@ 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__) @@ -155,27 +123,7 @@ 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__) @@ -185,63 +133,7 @@ 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__) @@ -308,3 +200,11 @@ omc_associatedpowermanagementservice_prov = OMC_AssociatedPowerManagementService(env) return {'OMC_AssociatedPowerManagementService': omc_associatedpowermanagementservice_prov} + + +if __name__ == '__main__': + print get_shutdown_time() + + + + Modified: pyprofiles/powerManagement/trunk/OMC_PowerManagementCapabilities.py =================================================================== --- pyprofiles/powerManagement/trunk/OMC_PowerManagementCapabilities.py 2008-09-18 20:27:15 UTC (rev 1020) +++ pyprofiles/powerManagement/trunk/OMC_PowerManagementCapabilities.py 2008-09-19 03:40:51 UTC (rev 1021) @@ -47,11 +47,13 @@ #model['OtherPowerCapabilitiesDescriptions'] = ['',] # TODO #model['OtherPowerChangeCapabilities'] = '' # TODO #model['PowerCapabilities'] = [self.Values.PowerCapabilities.<VAL>,] # TODO - model['PowerChangeCapabilities'] = \ - [self.Values.PowerChangeCapabilities.Graceful_Shutdown_Supported, + model['PowerChangeCapabilities'] = [ + self.Values.PowerChangeCapabilities.Graceful_Shutdown_Supported, + self.Values.PowerChangeCapabilities.Power_State_Settable, ] - model['PowerStatesSupported'] = \ - [self.Values.PowerStatesSupported.Off___Soft_Graceful, + model['PowerStatesSupported'] = [ + self.Values.PowerStatesSupported.Off___Soft_Graceful, + self.Values.PowerStatesSupported.On, ] return model Modified: pyprofiles/powerManagement/trunk/OMC_PowerManagementService.py =================================================================== --- pyprofiles/powerManagement/trunk/OMC_PowerManagementService.py 2008-09-18 20:27:15 UTC (rev 1020) +++ pyprofiles/powerManagement/trunk/OMC_PowerManagementService.py 2008-09-19 03:40:51 UTC (rev 1021) @@ -7,6 +7,9 @@ import pywbem from pywbem.cim_provider2 import CIMProvider2 +from datetime import datetime, timedelta +from subprocess import call + from socket import getfqdn inst_id = 'SUSE:PowerStateManagement' @@ -394,10 +397,10 @@ return (rval, out_params) def cim_method_requestpowerstatechange(self, env, object_name, - param_managedelement, - param_timeoutperiod, param_powerstate, - param_time): + param_managedelement=None, + param_timeoutperiod=None, + param_time=None): """Implements OMC_PowerManagementService.RequestPowerStateChange() RequestPowerStateChange defines the desired power state of the @@ -466,12 +469,30 @@ logger.log_debug('Entering %s.cim_method_requestpowerstatechange()' \ % self.__class__.__name__) - # TODO do something - raise pywbem.CIMError(pywbem.CIM_ERR_METHOD_NOT_AVAILABLE) # Remove to implemented - out_params = [] - #out_params+= [pywbem.CIMParameter('job', type='reference', - # value=pywbem.CIMInstanceName(classname='CIM_ConcreteJob', ...))] # TODO - #rval = # TODO (type pywbem.Uint32 self.Values.RequestPowerStateChange) + if param_timeoutperiod is not None and param_time is not None: + return (self.Values.RequestPowerStateChange.Unknown_or_Unspecified_Error,[]) + + if param_time is not None: + if not isinstance(param_time, pywbem.CIMDateTime): + return (self.Values.RequestPowerStateChange.Invalid_Parameter,[]) + if param_time.is_interval: + td = param_time.timedelta + else: + now = pywbem.CIMDateTime.now().datetime + if param_time.datetime < now: + return (self.Values.RequestPowerStateChange.Invalid_Parameter,[]) + td = param_time.datetime - now + + tmins = td.days*24*60 + td.seconds / 60 \ + + td.microseconds / 10e6 / 60 + minutes = int(tmins) + if tmins % 1 >= 0.5: + minutes += 1 + + call('/sbin/shutdown -k -h +%s &' % minutes, shell=True) + return (self.Values.RequestPowerStateChange.Completed_with_No_Error,[]) + + rval = self.Values.RequestPowerStateChange.Unknown_or_Unspecified_Error return (rval, out_params) def cim_method_startservice(self, env, object_name): This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ba...@us...> - 2008-09-18 16:15:07
|
Revision: 1013 http://omc.svn.sourceforge.net/omc/?rev=1013&view=rev Author: bartw Date: 2008-09-18 16:15:18 +0000 (Thu, 18 Sep 2008) Log Message: ----------- removed some old code Modified Paths: -------------- cmpi-bindings/trunk/swig/python/cmpi_pywbem_bindings.py Modified: cmpi-bindings/trunk/swig/python/cmpi_pywbem_bindings.py =================================================================== --- cmpi-bindings/trunk/swig/python/cmpi_pywbem_bindings.py 2008-09-18 16:08:11 UTC (rev 1012) +++ cmpi-bindings/trunk/swig/python/cmpi_pywbem_bindings.py 2008-09-18 16:15:18 UTC (rev 1013) @@ -200,9 +200,6 @@ def set_context_value(self, key, value): pass -_classcache = {} -_conn = SFCBUDSConnection() - g_proxies = {} class CMPIProxyProvider(object): @@ -232,7 +229,6 @@ #test_conversions() self.env.ctx = ctx op = self.cmpi2pywbem_instname(objname) - conn = SFCBUDSConnection() try: for i in self.proxy.MI_enumInstanceNames(self.env, op): cop = self.pywbem2cmpi_instname(i) @@ -246,7 +242,6 @@ print 'provider.py: In enum_instances()' self.env.ctx = ctx op = self.cmpi2pywbem_instname(objname) - conn = SFCBUDSConnection() try: for i in self.proxy.MI_enumInstances(self.env, op, plist): cinst = self.pywbem2cmpi_inst(i) @@ -260,7 +255,6 @@ print 'provider.py: In get_instance()' self.env.ctx = ctx op = self.cmpi2pywbem_instname(objname) - conn = SFCBUDSConnection() try: pinst = self.proxy.MI_getInstance(self.env, op, plist) except pywbem.CIMError, args: This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <np...@us...> - 2008-09-18 15:29:02
|
Revision: 1010 http://omc.svn.sourceforge.net/omc/?rev=1010&view=rev Author: npaxton Date: 2008-09-18 15:29:13 +0000 (Thu, 18 Sep 2008) Log Message: ----------- add 'numinsts() class method Modified Paths: -------------- cmpi-bindings/trunk/test/python/TestMethod.mof cmpi-bindings/trunk/test/python/TestMethod.py Modified: cmpi-bindings/trunk/test/python/TestMethod.mof =================================================================== --- cmpi-bindings/trunk/test/python/TestMethod.mof 2008-09-18 15:26:51 UTC (rev 1009) +++ cmpi-bindings/trunk/test/python/TestMethod.mof 2008-09-18 15:29:13 UTC (rev 1010) @@ -250,6 +250,9 @@ [in, required] Test_Method REF paths[] ); + [ Description("Return number of instances of Test_Method") ] + sint32 numInsts(); + [ Description("Create the specified instance of Test_Method") ] sint32 createObject( [in, required, EmbeddedInstance("Test_Method")] string inst Modified: cmpi-bindings/trunk/test/python/TestMethod.py =================================================================== --- cmpi-bindings/trunk/test/python/TestMethod.py 2008-09-18 15:26:51 UTC (rev 1009) +++ cmpi-bindings/trunk/test/python/TestMethod.py 2008-09-18 15:29:13 UTC (rev 1010) @@ -19,8 +19,8 @@ def __init__ (self, env): logger = env.get_logger() - logger.log_debug('Initializing provider %s from %s' \ - % (self.__class__.__name__, __file__)) + logger.log_debug('Initializing provider %s from %s.... num g_insts=%d' \ + % (self.__class__.__name__, __file__, len(g_insts))) def get_instance(self, env, model): logger = env.get_logger() @@ -700,6 +700,13 @@ rval = pywbem.Sint32(0) return (rval, out_params) + def cim_method_numinsts(self, env, object_name): + logger = env.get_logger() + logger.log_debug('Entering %s.cim_method_numinsts()' \ + % self.__class__.__name__) + + return (pywbem.Sint32(len(g_insts)), {}) + def cim_method_createobject(self, env, object_name, param_inst): logger = env.get_logger() logger.log_debug('Entering %s.cim_method_createobject()' \ This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <np...@us...> - 2008-09-18 15:26:41
|
Revision: 1009 http://omc.svn.sourceforge.net/omc/?rev=1009&view=rev Author: npaxton Date: 2008-09-18 15:26:51 +0000 (Thu, 18 Sep 2008) Log Message: ----------- Remove print statements... InvokeMethod upcall complete Modified Paths: -------------- cmpi-bindings/trunk/swig/python/cmpi_pywbem_bindings.py Modified: cmpi-bindings/trunk/swig/python/cmpi_pywbem_bindings.py =================================================================== --- cmpi-bindings/trunk/swig/python/cmpi_pywbem_bindings.py 2008-09-18 13:39:16 UTC (rev 1008) +++ cmpi-bindings/trunk/swig/python/cmpi_pywbem_bindings.py 2008-09-18 15:26:51 UTC (rev 1009) @@ -114,13 +114,11 @@ yield piname def InvokeMethod(self, path, method, **params): - print "!@!@!@!@ Entering ch.InvokeMethod... path=%s method=%s params=%s" %(path, method, params) - # TODO: Handle the case where the classname is passed in for path (class methods rather than instance methods) # TODO: Where does default namespace come from? ns = 'root/cimv2' if isinstance(path, pywbem.StringTypes): - print "path is a String type: convert to CIMClassName" + # path is a String type: convert to CIMClassName objpath = pywbem.CIMClassName(path, namespace=ns) elif isinstance(path, pywbem.CIMInstanceName): if path.namespace is None: @@ -129,21 +127,13 @@ else: raise pywbem.CIMError(pywbem.CIM_INVALIDPARAMETER) cop = self.proxy.pywbem2cmpi_instname(objpath) - print "!@!@!@!@ Working with cop: ", cop inargs=self.proxy.pywbem2cmpi_args(params) - print "!@!@!@!@ Working with inargs: ", inargs poutargs = self.broker.new_args() - print "!@!@!@!@ about to call invokeMethod: inargs(%s)=%s outargs(%s)=%s" %(type(inargs), inargs, type(poutargs), poutargs) rc=self.broker.invokeMethod(self.ctx, cop, method, inargs, poutargs) - print "!@!@!@!@ Got rc(type:%s)=%s poutargs: " %(type(rc),rc), poutargs outrc = self.proxy.cmpi2pywbem_data(rc) - print "!@!@!@!@ Converted to rc(type:%s): %s "%(type(outrc),outrc) outargs = self.proxy.cmpi2pywbem_args(poutargs) - print "!@!@!@!@ Converted to outargs: ", outargs - rslt = ((type(rc),rc),outargs) - print "!@!@!@!@ returning ", rslt + rslt = ((type(outrc),outrc),outargs) return rslt - #pass def GetClass(self, *args, **kwargs): raise pywbem.CIMError(pywbem.CIM_ERR_NOT_SUPPORTED) @@ -457,7 +447,6 @@ if cargs is None: cargs = self.broker.new_args() for name, (_type, pval) in pargs.items(): - print "@@@@ Got name: ",name," _type: ", _type, " pval: ",pval data, _type = self.pywbem2cmpi_value(pval, _type) ctype = _pywbem2cmpi_typemap[_type] if isinstance(pval, list): @@ -542,7 +531,6 @@ attr = 'inst' pdata = self.pywbem2cmpi_inst(pdata) elif _type == 'chars': - print "!!!! pywbem2cmpi_value: Got a _char_ type... Need to convert it" pdata = self.broker.new_string(str(pdata)) setattr(cval, attr, pdata) return cval, _type @@ -564,7 +552,6 @@ if _type == 'string': pval = cval.to_s() elif _type == 'chars': - print "!!!! cmpi2pywbem_value: Got a _char_ type... Need to convert it" pval = cval.to_s() elif ctype == 'ref': pval = self.cmpi2pywbem_instname(cval) @@ -630,8 +617,6 @@ return val if _type == 'chars': _type = 'string' - print "!!!! cmpi2pywbem_data: Got a _char_ type... Need to convert it: type: %s value: "%type(val), val - print "!!!! cmpi2pywbem_data: post convert?" return pywbem.tocimobj(_type, val) def cmpi2pywbem_datetime(self, dt): @@ -705,7 +690,6 @@ itype = itype ^ cmpi.CMPI_ARRAY try: - print "^^^^^^^^ in _cmpi_type2string... calling _cmpi2pywbem_typemap[%d]" %itype tp = _cmpi2pywbem_typemap[itype] except KeyError: raise ValueError('Unknown type: %d' % itype) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <kk...@us...> - 2008-09-18 13:39:06
|
Revision: 1008 http://omc.svn.sourceforge.net/omc/?rev=1008&view=rev Author: kkaempf Date: 2008-09-18 13:39:16 +0000 (Thu, 18 Sep 2008) Log Message: ----------- push OpenSUSE Buildservice fixes upstream. Modified Paths: -------------- cmpi-bindings/trunk/package/cmpi-bindings.changes cmpi-bindings/trunk/package/cmpi-bindings.spec.in Modified: cmpi-bindings/trunk/package/cmpi-bindings.changes =================================================================== --- cmpi-bindings/trunk/package/cmpi-bindings.changes 2008-09-18 04:50:54 UTC (rev 1007) +++ cmpi-bindings/trunk/package/cmpi-bindings.changes 2008-09-18 13:39:16 UTC (rev 1008) @@ -1,4 +1,11 @@ ------------------------------------------------------------------- +Wed Sep 17 02:10:37 CEST 2008 - mru...@su... + +- provide the main package for the debug package. we dont use + debug_package_requires here as it would enforce to install both + packages. + +------------------------------------------------------------------- Thu Sep 11 15:29:08 CEST 2008 - kk...@su... - Support Python threads, do proper locking Modified: cmpi-bindings/trunk/package/cmpi-bindings.spec.in =================================================================== --- cmpi-bindings/trunk/package/cmpi-bindings.spec.in 2008-09-18 04:50:54 UTC (rev 1007) +++ cmpi-bindings/trunk/package/cmpi-bindings.spec.in 2008-09-18 13:39:16 UTC (rev 1008) @@ -2,22 +2,29 @@ # spec file for package cmpi-bindings # # Copyright (c) 2008 SUSE LINUX Products GmbH, Nuernberg, Germany. -# This file and all modifications and additions to the pristine -# package are under the same license as the package itself. +# All modifications and additions to the file contributed by third parties +# remain the property of their copyright owners, unless otherwise agreed +# upon. The license for this file, and modifications and additions to the +# file, is the same license as for the pristine package itself (unless the +# license for the pristine package is not an Open Source License, in which +# case the license is the MIT License). An "Open Source License" is a +# license that conforms to the Open Source Definition (Version 1.9) +# published by the Open Source Initiative. # # Please submit bugfixes or comments via http://bugs.opensuse.org/ # # nodebuginfo +Url: http://omc-project.com Name: @PACKAGE@ Version: @VERSION@ Release: 0 -License: GPL -Summary: Bindings for cmpi -Group: Development/Sources +License: BSD 3-Clause; EPL 1.0 +Summary: Adapter to write and run CMPI-type CIM providers +Group: Development/Libraries/Other BuildRoot: %{_tmppath}/%{name}-%{version}-build -BuildRequires: cmake gcc-c++ ruby-devel python-devel swig +BuildRequires: cmake gcc-c++ python-devel ruby-devel swig BuildRequires: sblim-sfcb Source: %{name}-%{version}.tar.bz2 Prefix: /usr @@ -49,8 +56,10 @@ %{__rm} -rf %{buildroot} %package -n cmpi-bindings-ruby -Summary: Ruby bindings for cmpi +Summary: Adapter to write and run CMPI-type CIM providers in Ruby Group: Development/Languages/Ruby +# for the debug package. we dont use debug_package_requires here as it would enforce to install both packages. +Provides: %{name} = %{version}-%{release} %description -n cmpi-bindings-ruby - @@ -61,8 +70,10 @@ %{_libdir}/ruby/vendor_ruby/%{rb_ver}/rcmpi_instance.rb %package -n cmpi-bindings-pywbem -Summary: Python bindings for cmpi +Summary: Adapter to write and run CMPI-type CIM providers in Python Group: Development/Languages/Python +# for the debug package. we dont use debug_package_requires here as it would enforce to install both packages. +Provides: %{name} = %{version}-%{release} %description -n cmpi-bindings-pywbem - This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <np...@us...> - 2008-09-18 13:27:21
|
Revision: 1020 http://omc.svn.sourceforge.net/omc/?rev=1020&view=rev Author: npaxton Date: 2008-09-18 20:27:15 +0000 (Thu, 18 Sep 2008) Log Message: ----------- starting work on Indication upcalls, along with some minor cleanup Modified Paths: -------------- cmpi-bindings/trunk/swig/python/cmpi_pywbem_bindings.py Modified: cmpi-bindings/trunk/swig/python/cmpi_pywbem_bindings.py =================================================================== --- cmpi-bindings/trunk/swig/python/cmpi_pywbem_bindings.py 2008-09-18 20:25:44 UTC (rev 1019) +++ cmpi-bindings/trunk/swig/python/cmpi_pywbem_bindings.py 2008-09-18 20:27:15 UTC (rev 1020) @@ -114,14 +114,16 @@ yield piname def InvokeMethod(self, path, method, **params): - - # TODO: Where does default namespace come from? - ns = 'root/cimv2' if isinstance(path, pywbem.StringTypes): # path is a String type: convert to CIMClassName objpath = pywbem.CIMClassName(path, namespace=ns) elif isinstance(path, pywbem.CIMInstanceName): if path.namespace is None: + # TODO: Where does default namespace come from? + # will likely either have to pass in a ns, or make + # path always be an objectpath and not support just a + # string for a classname (to creata a CIMClassName) + ns = 'root/cimv2' path.namespace = ns objpath = path else: @@ -161,6 +163,10 @@ def DeleteInstance(self, path): cop = self.proxy.pywbem2cmpi_instname(path) return self.broker.deleteInstance(self.ctx, cop) + + def DeliverIndication(self, ns, instance): + inst = self.proxy.pywbem2cmpi_inst(instance) + return self.broker.deliverIndication(self.ctx, ns, inst) ### Not sure whether this should be on BrokerCIMOMHandle or ### on ProviderEnvironment This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <np...@us...> - 2008-09-18 13:25:33
|
Revision: 1019 http://omc.svn.sourceforge.net/omc/?rev=1019&view=rev Author: npaxton Date: 2008-09-18 20:25:44 +0000 (Thu, 18 Sep 2008) Log Message: ----------- starting work on Indication upcalls, along with some minor cleanup Modified Paths: -------------- cmpi-bindings/trunk/test/python/UpcallAtomProvider.py Modified: cmpi-bindings/trunk/test/python/UpcallAtomProvider.py =================================================================== --- cmpi-bindings/trunk/test/python/UpcallAtomProvider.py 2008-09-18 19:13:30 UTC (rev 1018) +++ cmpi-bindings/trunk/test/python/UpcallAtomProvider.py 2008-09-18 20:25:44 UTC (rev 1019) @@ -387,7 +387,7 @@ # ch methods =['AssociatorNames', 'Associators', 'References', 'ReferenceNames' # 'CreateInstance', 'DeleteInstance', 'GetInstance', 'ModifyInstance', # 'EnumerateInstanceNames', 'EnumerateInstances', 'InvokeMethod', -# 'export_indication' ] +# 'DeliverIndication' ] #test_1_upcalls print "####### test_1_upcalls #######" #Written to test associators of Linux_UnixProcess class @@ -496,7 +496,7 @@ except pywbem.CIMError, arg: logger.log_debug("**** CIMError: ch.Reference ****") -#export_indication +#DeliverIndication # Separate test for indications @@ -701,7 +701,7 @@ def cim_method_send_indication(self, env, object_name): """ - Method to test the upcalls to the cimom handle for export_indications. + Method to test the upcalls to the cimom handle for DeliverIndications. """ global _indication_names,_indication_count cimtime = pywbem.CIMDateTime.now() @@ -722,17 +722,17 @@ try: print '### Exporting indication. pid:',os.getpid() - ch.export_indication(ch.default_namespace, alert_ind) + ch.DeliverIndication(ch.default_namespace, alert_ind) print '### Done exporting indication' except pywbem.CIMError, arg: print '### Caught exception exporting indication' raise - indcount = _indication_names.length() + indcount = len(_indication_names) st = time.time() while _indication_count < indcount: time.sleep(.01) - if (time.time() - st) > 60.00: + if (time.time() - st) > 10.00: raise "Only received %d. expected %d" % (_indication_count, indcount) for name,received in _indication_names.items(): This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ba...@us...> - 2008-09-18 12:13:21
|
Revision: 1018 http://omc.svn.sourceforge.net/omc/?rev=1018&view=rev Author: bartw Date: 2008-09-18 19:13:30 +0000 (Thu, 18 Sep 2008) Log Message: ----------- fixed a trace message Modified Paths: -------------- cmpi-bindings/trunk/src/cmpi_provider_python.c Modified: cmpi-bindings/trunk/src/cmpi_provider_python.c =================================================================== --- cmpi-bindings/trunk/src/cmpi_provider_python.c 2008-09-18 17:49:36 UTC (rev 1017) +++ cmpi-bindings/trunk/src/cmpi_provider_python.c 2008-09-18 19:13:30 UTC (rev 1018) @@ -244,7 +244,10 @@ { SWIG_PYTHON_THREAD_END_BLOCK; _SBLIM_TRACE(1,("<%d/0x%x> Python: import cmpi_pywbem_bindings failed", getpid(), pthread_self())); - PY_CMPI_SETFAIL(get_exc_trace(broker)); + CMPIString* trace = get_exc_trace(broker); + _SBLIM_TRACE(1,("<%d/0x%x> %s", getpid(), pthread_self(), + CMGetCharsPtr(trace, NULL))); + PY_CMPI_SETFAIL(trace); abort(); return -1; } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ba...@us...> - 2008-09-18 10:31:10
|
Revision: 1016 http://omc.svn.sourceforge.net/omc/?rev=1016&view=rev Author: bartw Date: 2008-09-18 17:31:16 +0000 (Thu, 18 Sep 2008) Log Message: ----------- added script to terment providers Added Paths: ----------- cmpi-bindings/trunk/test/python/abuse.sh Added: cmpi-bindings/trunk/test/python/abuse.sh =================================================================== --- cmpi-bindings/trunk/test/python/abuse.sh (rev 0) +++ cmpi-bindings/trunk/test/python/abuse.sh 2008-09-18 17:31:16 UTC (rev 1016) @@ -0,0 +1,38 @@ +#!/bin/sh + + +python test_assoc.py $@ & +python test_assoc.py $@ & + +python TestAtomProvider_Test.py $@ & +python TestMethod_Test.py $@ & +python TestAtomProvider_Test.py $@ & +python TestMethod_Test.py $@ & +python TestAtomProvider_Test.py $@ & +python TestMethod_Test.py $@ & + +python TestAtomProvider_Test.py $@ & +python TestMethod_Test.py $@ & +python TestAtomProvider_Test.py $@ & +python TestMethod_Test.py $@ & +python TestAtomProvider_Test.py $@ & +python TestMethod_Test.py $@ & + +python TestAtomProvider_Test.py $@ & +python TestMethod_Test.py $@ & +python TestAtomProvider_Test.py $@ & +python TestMethod_Test.py $@ & +python TestAtomProvider_Test.py $@ & +python TestMethod_Test.py $@ & + +sleep 15 + +python test_assoc.py $@ & + +python TestAtomProvider_Test.py $@ & +python TestMethod_Test.py $@ & +python TestAtomProvider_Test.py $@ & +python TestMethod_Test.py $@ & +python TestAtomProvider_Test.py $@ & +python TestMethod_Test.py $@ & + This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ba...@us...> - 2008-09-18 10:24:20
|
Revision: 1015 http://omc.svn.sourceforge.net/omc/?rev=1015&view=rev Author: bartw Date: 2008-09-18 17:24:31 +0000 (Thu, 18 Sep 2008) Log Message: ----------- pass a new environment to each operation Modified Paths: -------------- cmpi-bindings/trunk/swig/python/cmpi_pywbem_bindings.py Modified: cmpi-bindings/trunk/swig/python/cmpi_pywbem_bindings.py =================================================================== --- cmpi-bindings/trunk/swig/python/cmpi_pywbem_bindings.py 2008-09-18 16:37:01 UTC (rev 1014) +++ cmpi-bindings/trunk/swig/python/cmpi_pywbem_bindings.py 2008-09-18 17:24:31 UTC (rev 1015) @@ -184,9 +184,9 @@ class ProviderEnvironment(object): - def __init__(self, proxy): + def __init__(self, proxy, ctx): self.proxy = proxy - self.ctx = None + self.ctx = ctx def get_logger(self): return Logger(self.proxy.broker) #def get_cimom_handle(self): @@ -220,8 +220,8 @@ print 'called CMPIProxyProvider(', miname, ',', broker, ')' self.miname = miname self.broker = broker - self.env = ProviderEnvironment(self) - self.proxy = ProviderProxy(self.env, + env = ProviderEnvironment(self, None) + self.proxy = ProviderProxy(env, '/usr/lib/pycim/'+miname+'.py') #print '*** broker.name()', broker.name() #print '*** broker.capabilities()', broker.capabilities() @@ -232,10 +232,10 @@ def enum_instance_names(self, ctx, rslt, objname): print 'provider.py: In enum_instance_names()' #test_conversions() - self.env.ctx = ctx + env = ProviderEnvironment(self, ctx) op = self.cmpi2pywbem_instname(objname) try: - for i in self.proxy.MI_enumInstanceNames(self.env, op): + for i in self.proxy.MI_enumInstanceNames(env, op): cop = self.pywbem2cmpi_instname(i) rslt.return_objectpath(cop) except pywbem.CIMError, args: @@ -245,10 +245,10 @@ def enum_instances(self, ctx, rslt, objname, plist): print 'provider.py: In enum_instances()' - self.env.ctx = ctx + env = ProviderEnvironment(self, ctx) op = self.cmpi2pywbem_instname(objname) try: - for i in self.proxy.MI_enumInstances(self.env, op, plist): + for i in self.proxy.MI_enumInstances(env, op, plist): cinst = self.pywbem2cmpi_inst(i) rslt.return_instance(cinst) except pywbem.CIMError, args: @@ -258,10 +258,10 @@ def get_instance(self, ctx, rslt, objname, plist): print 'provider.py: In get_instance()' - self.env.ctx = ctx + env = ProviderEnvironment(self, ctx) op = self.cmpi2pywbem_instname(objname) try: - pinst = self.proxy.MI_getInstance(self.env, op, plist) + pinst = self.proxy.MI_getInstance(env, op, plist) except pywbem.CIMError, args: return args[:2] cinst = self.pywbem2cmpi_inst(pinst) @@ -271,10 +271,10 @@ def create_instance(self, ctx, rslt, objname, newinst): - self.env.ctx = ctx + env = ProviderEnvironment(self, ctx) pinst = self.cmpi2pywbem_inst(newinst) try: - piname = self.proxy.MI_createInstance(self.env, pinst) + piname = self.proxy.MI_createInstance(env, pinst) except pywbem.CIMError, args: return args[:2] ciname = self.pywbem2cmpi_instname(piname) @@ -284,19 +284,20 @@ def set_instance(self, ctx, rslt, objname, newinst, plist): - self.env.ctx = ctx + env = ProviderEnvironment(self, ctx) pinst = self.cmpi2pywbem_inst(newinst) pinst.path = self.cmpi2pywbem_instname(objname) try: - self.proxy.MI_modifyInstance(self.env, pinst, plist) + self.proxy.MI_modifyInstance(env, pinst, plist) except pywbem.CIMError, args: return args[:2] return (0, '') def delete_instance(self, ctx, rslt, objname): + env = ProviderEnvironment(self, ctx) piname = self.cmpi2pywbem_instname(objname) try: - self.proxy.MI_deleteInstance(self.env, piname) + self.proxy.MI_deleteInstance(env, piname) except pywbem.CIMError, args: return args[:2] return (0, '') @@ -308,11 +309,11 @@ def associator_names(self, ctx, rslt, objName, assocClass, resultClass, role, resultRole): - self.env.ctx = ctx + env = ProviderEnvironment(self, ctx) piname = self.cmpi2pywbem_instname(objName) try: - for i in self.proxy.MI_associatorNames(self.env, piname, + for i in self.proxy.MI_associatorNames(env, piname, assocClass, resultClass, role, resultRole): ciname = self.pywbem2cmpi_instname(i) rslt.return_objectpath(ciname) @@ -323,11 +324,11 @@ def associators(self, ctx, rslt, objName, assocClass, resultClass, role, resultRole, props): - self.env.ctx = ctx + env = ProviderEnvironment(self, ctx) piname = self.cmpi2pywbem_instname(objName) try: - for i in self.proxy.MI_associators(self.env, piname, + for i in self.proxy.MI_associators(env, piname, assocClass, resultClass, role, resultRole, props): cinst = self.pywbem2cmpi_inst(i) rslt.return_instance(cinst) @@ -339,11 +340,11 @@ def reference_names(self, ctx, rslt, objName, resultClass, role): print 'pycmpi_provider.py: In reference_names()' - self.env.ctx = ctx + env = ProviderEnvironment(self, ctx) piname = self.cmpi2pywbem_instname(objName) try: - for i in self.proxy.MI_referenceNames(self.env, piname, + for i in self.proxy.MI_referenceNames(env, piname, resultClass, role): ciname = self.pywbem2cmpi_instname(i) rslt.return_objectpath(ciname) @@ -354,11 +355,11 @@ def references(self, ctx, rslt, objName, resultClass, role, props): - self.env.ctx = ctx + env = ProviderEnvironment(self, ctx) piname = self.cmpi2pywbem_instname(objName) try: - for i in self.proxy.MI_references(self.env, piname, + for i in self.proxy.MI_references(env, piname, resultClass, role, props): cinst = self.pywbem2cmpi_inst(i) rslt.return_instance(cinst) @@ -370,11 +371,11 @@ def invoke_method(self, ctx, rslt, objName, method, inargs, outargs): print '*** in invoke_method' - self.env.ctx = ctx + env = ProviderEnvironment(self, ctx) op = self.cmpi2pywbem_instname(objName) pinargs = self.cmpi2pywbem_args(inargs) try: - ((_type, rv), poutargs) = self.proxy.MI_invokeMethod(self.env, + ((_type, rv), poutargs) = self.proxy.MI_invokeMethod(env, op, method, pinargs) except pywbem.CIMError, args: return args[:2] @@ -389,18 +390,18 @@ def authorize_filter(self, ctx, filter, className, classPath, owner): - #self.env.ctx = ctx + #env = ProviderEnvironment(self, ctx) pass def activate_filter(self, ctx, filter, className, classPath, firstActivation): - #self.env.ctx = ctx + #env = ProviderEnvironment(self, ctx) pass def deactivate_filter(self, ctx, filter, className, classPath, lastActivation): - #self.env.ctx = ctx + #env = ProviderEnvironment(self, ctx) pass @@ -408,16 +409,16 @@ #def must_poll(self, ctx, rslt, filter, className, classPath): # NOTE: sfcb signature for this doesn't have the rslt. def must_poll(self, ctx, filter, className, classPath): - #self.env.ctx = ctx + #env = ProviderEnvironment(self, ctx) pass def enable_indications(self, ctx): - #self.env.ctx = ctx + #env = ProviderEnvironment(self, ctx) pass def disable_indications(self, ctx): - #self.env.ctx = ctx + #env = ProviderEnvironment(self, ctx) pass This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ba...@us...> - 2008-09-18 04:50:46
|
Revision: 1007 http://omc.svn.sourceforge.net/omc/?rev=1007&view=rev Author: bartw Date: 2008-09-18 04:50:54 +0000 (Thu, 18 Sep 2008) Log Message: ----------- make sure there is only one proxy per miname Modified Paths: -------------- cmpi-bindings/trunk/swig/python/cmpi_pywbem_bindings.py Modified: cmpi-bindings/trunk/swig/python/cmpi_pywbem_bindings.py =================================================================== --- cmpi-bindings/trunk/swig/python/cmpi_pywbem_bindings.py 2008-09-17 23:54:28 UTC (rev 1006) +++ cmpi-bindings/trunk/swig/python/cmpi_pywbem_bindings.py 2008-09-18 04:50:54 UTC (rev 1007) @@ -79,7 +79,7 @@ role, resultRole, props) while e and e.hasNext(): data = e.next() - assert(data.type == cmpi_instance) + assert(data.type == cmpi.CMPI_instance) pinst=self.proxy.cmpi2pywbem_inst(data.value.inst) yield pinst @@ -90,7 +90,7 @@ role, resultRole) while e and e.hasNext(): data = e.next() - assert(data.type == cmpi_ref) + assert(data.type == cmpi.CMPI_ref) piname=self.proxy.cmpi2pywbem_inst(data.value.ref) yield piname @@ -100,7 +100,7 @@ role, props) while e and e.hasNext(): data = e.next() - assert(data.type == cmpi_ref) + assert(data.type == cmpi.CMPI_instance) piname=self.proxy.cmpi2pywbem_inst(data.value.ref) yield piname @@ -109,7 +109,7 @@ e = self.broker.referenceNames(self.ctx, cop, resultClass, role) while e and e.hasNext(): data = e.next() - assert(data.type == cmpi_ref) + assert(data.type == cmpi.CMPI_ref) piname=self.proxy.cmpi2pywbem_inst(data.value.ref) yield piname @@ -213,6 +213,7 @@ _classcache = {} _conn = SFCBUDSConnection() +g_proxies = {} class CMPIProxyProvider(object): @@ -221,8 +222,15 @@ self.broker = broker self.miname = miname self.env = ProviderEnvironment(self) - self.proxy = ProviderProxy(self.env, - '/usr/lib/pycim/'+miname+'.py') + try: + self.proxy = g_proxies[self.miname] + if str(self.proxy.env.proxy.broker) != str(broker): + raise pywbem.CIMError(pywbem.CIM_ERR_FAILED, + 'New broker not the same as cached broker!') + except KeyError: + self.proxy = ProviderProxy(self.env, + '/usr/lib/pycim/'+miname+'.py') + g_proxies[self.miname] = self.proxy #print '*** broker.name()', broker.name() #print '*** broker.capabilities()', broker.capabilities() #print '*** broker.version()', broker.version() This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <np...@us...> - 2008-09-17 23:54:17
|
Revision: 1006 http://omc.svn.sourceforge.net/omc/?rev=1006&view=rev Author: npaxton Date: 2008-09-17 23:54:28 +0000 (Wed, 17 Sep 2008) Log Message: ----------- Get rid of iterators in favor of generators; refactor Associator/AssociatorNames accordingly; add handling for References/ReferenceNames and for InvokeMethod; handle CMPI_chars type Modified Paths: -------------- cmpi-bindings/trunk/swig/python/cmpi_pywbem_bindings.py Modified: cmpi-bindings/trunk/swig/python/cmpi_pywbem_bindings.py =================================================================== --- cmpi-bindings/trunk/swig/python/cmpi_pywbem_bindings.py 2008-09-17 22:16:27 UTC (rev 1005) +++ cmpi-bindings/trunk/swig/python/cmpi_pywbem_bindings.py 2008-09-17 23:54:28 UTC (rev 1006) @@ -41,40 +41,6 @@ def SFCBUDSConnection(): return pywbem.WBEMConnection('/tmp/sfcbHttpSocket') -class CIMInstanceNameIterator(object): - def __init__(self, proxy, enumeration): - self.enumeration = enumeration - self.proxy = proxy - - def __iter__(self): - return self - - def next(self): - if self.enumeration: - if not self.enumeration.hasNext(): - raise StopIteration - val = getattr(self.enumeration.next().value, 'ref') - if val is None: - raise StopIteration - yield self.proxy.cmpi2pywbem_instname(val) - -class CIMInstanceIterator(object): - def __init__(self, proxy, enumeration): - self.enumeration = enumeration - self.proxy = proxy - - def __iter__(self): - return self - - def next(self): - if self.enumeration: - if not self.enumeration.hasNext(): - raise StopIteration - val = getattr(self.enumeration.next().value, 'inst') - if val is None: - raise StopIteration - yield self.proxy.cmpi2pywbem_instname(val) - class BrokerCIMOMHandle(object): def __init__(self, proxy, ctx): self.broker = proxy.broker @@ -111,40 +77,89 @@ cop = self.proxy.pywbem2cmpi_instname(path) e = self.broker.associators(self.ctx, cop, assocClass, resultClass, role, resultRole, props) - return CIMInstanceIterator(self.proxy, e) + while e and e.hasNext(): + data = e.next() + assert(data.type == cmpi_instance) + pinst=self.proxy.cmpi2pywbem_inst(data.value.inst) + yield pinst def AssociatorNames(self, path, assocClass = None, resultClass = None, role = None, resultRole = None, props = None): cop = self.proxy.pywbem2cmpi_instname(path) e = self.broker.associatorNames(self.ctx, cop, assocClass, resultClass, role, resultRole) - return CIMInstanceNameIterator(self.proxy, e) + while e and e.hasNext(): + data = e.next() + assert(data.type == cmpi_ref) + piname=self.proxy.cmpi2pywbem_inst(data.value.ref) + yield piname - def References(self): - pass - def ReferenceNames(self): - pass - def InvokeMethod(self, path, method, args): - ''' + def References(self, path, resultClass=None, role=None, props=None): cop = self.proxy.pywbem2cmpi_instname(path) - self.proxy.pywbem2cmpi_args(args, inargs) - poutargs=cmpi.CMPIArgs() + e = self.broker.references(self.ctx, cop, resultClass, + role, props) + while e and e.hasNext(): + data = e.next() + assert(data.type == cmpi_ref) + piname=self.proxy.cmpi2pywbem_inst(data.value.ref) + yield piname + + def ReferenceNames(self, path, resultClass=None, role=None): + cop = self.proxy.pywbem2cmpi_instname(path) + e = self.broker.referenceNames(self.ctx, cop, resultClass, role) + while e and e.hasNext(): + data = e.next() + assert(data.type == cmpi_ref) + piname=self.proxy.cmpi2pywbem_inst(data.value.ref) + yield piname + + def InvokeMethod(self, path, method, **params): + print "!@!@!@!@ Entering ch.InvokeMethod... path=%s method=%s params=%s" %(path, method, params) + # TODO: Handle the case where the classname is passed in for path (class methods rather than instance methods) + + # TODO: Where does default namespace come from? + ns = 'root/cimv2' + if isinstance(path, pywbem.StringTypes): + print "path is a String type: convert to CIMClassName" + objpath = pywbem.CIMClassName(path, namespace=ns) + elif isinstance(path, pywbem.CIMInstanceName): + if path.namespace is None: + path.namespace = ns + objpath = path + else: + raise pywbem.CIMError(pywbem.CIM_INVALIDPARAMETER) + cop = self.proxy.pywbem2cmpi_instname(objpath) + print "!@!@!@!@ Working with cop: ", cop + inargs=self.proxy.pywbem2cmpi_args(params) + print "!@!@!@!@ Working with inargs: ", inargs + poutargs = self.broker.new_args() + print "!@!@!@!@ about to call invokeMethod: inargs(%s)=%s outargs(%s)=%s" %(type(inargs), inargs, type(poutargs), poutargs) rc=self.broker.invokeMethod(self.ctx, cop, method, inargs, poutargs) + print "!@!@!@!@ Got rc(type:%s)=%s poutargs: " %(type(rc),rc), poutargs + outrc = self.proxy.cmpi2pywbem_data(rc) + print "!@!@!@!@ Converted to rc(type:%s): %s "%(type(outrc),outrc) outargs = self.proxy.cmpi2pywbem_args(poutargs) - rslt = (rc,outargs) + print "!@!@!@!@ Converted to outargs: ", outargs + rslt = ((type(rc),rc),outargs) + print "!@!@!@!@ returning ", rslt return rslt - ''' - pass + #pass + def GetClass(self, *args, **kwargs): raise pywbem.CIMError(pywbem.CIM_ERR_NOT_SUPPORTED) + def EnumerateClassNames(self, *args, **kwargs): raise pywbem.CIMError(pywbem.CIM_ERR_NOT_SUPPORTED) + def EnumerateClasses(self, *args, **kwargs): raise pywbem.CIMError(pywbem.CIM_ERR_NOT_SUPPORTED) + def CreateClass(self, *args, **kwargs): raise pywbem.CIMError(pywbem.CIM_ERR_NOT_SUPPORTED) + def DeleteClass(self, *args, **kwargs): raise pywbem.CIMError(pywbem.CIM_ERR_NOT_SUPPORTED) + def CreateInstance(self, path, instance): cop = self.proxy.pywbem2cmpi_instname(path) inst = self.proxy.pywbem2cmpi_inst(instance) @@ -152,9 +167,11 @@ if ciname is None: return None return self.proxy.cmpi2pywbem_instname(ciname) + def DeleteInstance(self, path): cop = self.proxy.pywbem2cmpi_instname(path) return self.broker.deleteInstance(self.ctx, cop) + ### Not sure whether this should be on BrokerCIMOMHandle or ### on ProviderEnvironment ### We may want to move it ? @@ -432,6 +449,7 @@ if cargs is None: cargs = self.broker.new_args() for name, (_type, pval) in pargs.items(): + print "@@@@ Got name: ",name," _type: ", _type, " pval: ",pval data, _type = self.pywbem2cmpi_value(pval, _type) ctype = _pywbem2cmpi_typemap[_type] if isinstance(pval, list): @@ -471,12 +489,13 @@ def pywbem2cmpi_instname(self, iname): cop = self.broker.new_object_path(iname.namespace, str(iname.classname)) - for name, val in iname.keybindings.items(): - if val is None: - raise ValueError('NULL value for key "%s.%s"' % \ - (iname.classname, name)) - data, _type = self.pywbem2cmpi_value(val) - cop.add_key(str(name), data, _pywbem2cmpi_typemap[_type]) + if isinstance(iname, pywbem.CIMInstanceName): + for name, val in iname.keybindings.items(): + if val is None: + raise ValueError('NULL value for key "%s.%s"' % \ + (iname.classname, name)) + data, _type = self.pywbem2cmpi_value(val) + cop.add_key(str(name), data, _pywbem2cmpi_typemap[_type]) return cop def pywbem2cmpi_value(self, pdata, _type=None, cval=None): @@ -514,6 +533,9 @@ elif _type == 'instance': attr = 'inst' pdata = self.pywbem2cmpi_inst(pdata) + elif _type == 'chars': + print "!!!! pywbem2cmpi_value: Got a _char_ type... Need to convert it" + pdata = self.broker.new_string(str(pdata)) setattr(cval, attr, pdata) return cval, _type @@ -533,6 +555,9 @@ cval = getattr(cval, ctype) if _type == 'string': pval = cval.to_s() + elif _type == 'chars': + print "!!!! cmpi2pywbem_value: Got a _char_ type... Need to convert it" + pval = cval.to_s() elif ctype == 'ref': pval = self.cmpi2pywbem_instname(cval) else: @@ -595,6 +620,10 @@ if _type == 'instance': val = self.cmpi2pywbem_inst(val) return val + if _type == 'chars': + _type = 'string' + print "!!!! cmpi2pywbem_data: Got a _char_ type... Need to convert it: type: %s value: "%type(val), val + print "!!!! cmpi2pywbem_data: post convert?" return pywbem.tocimobj(_type, val) def cmpi2pywbem_datetime(self, dt): @@ -620,6 +649,7 @@ 'string' : cmpi.CMPI_string, 'datetime' : cmpi.CMPI_dateTime, 'instance' : cmpi.CMPI_instance, + 'chars' : cmpi.CMPI_chars, } _cmpi2pywbem_typemap = { @@ -639,6 +669,7 @@ cmpi.CMPI_string : 'string', cmpi.CMPI_dateTime : 'datetime', cmpi.CMPI_instance : 'instance', + cmpi.CMPI_chars : 'chars', #cmpi.CMPI_null : None, #cmpi.CMPI_args : 'args', @@ -666,6 +697,7 @@ itype = itype ^ cmpi.CMPI_ARRAY try: + print "^^^^^^^^ in _cmpi_type2string... calling _cmpi2pywbem_typemap[%d]" %itype tp = _cmpi2pywbem_typemap[itype] except KeyError: raise ValueError('Unknown type: %d' % itype) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ba...@us...> - 2008-09-17 22:16:16
|
Revision: 1005 http://omc.svn.sourceforge.net/omc/?rev=1005&view=rev Author: bartw Date: 2008-09-17 22:16:27 +0000 (Wed, 17 Sep 2008) Log Message: ----------- make sure vfprintf is called safely Modified Paths: -------------- cmpi-bindings/trunk/src/cmpi_provider_python.c Modified: cmpi-bindings/trunk/src/cmpi_provider_python.c =================================================================== --- cmpi-bindings/trunk/src/cmpi_provider_python.c 2008-09-17 22:07:47 UTC (rev 1004) +++ cmpi-bindings/trunk/src/cmpi_provider_python.c 2008-09-17 22:16:27 UTC (rev 1005) @@ -178,7 +178,7 @@ if (!PyString_Check(obstr)) TB_ERROR("getvalue() did not return a string"); - _SBLIM_TRACE(1,(PyString_AsString(obstr))); + _SBLIM_TRACE(1,("%s", PyString_AsString(obstr))); args = PyTuple_New(2); PyTuple_SetItem(args, 0, string2py("\n")); PyTuple_SetItem(args, 1, string2py("<br>")); @@ -352,7 +352,7 @@ PyErr_Print(); PyErr_Clear(); char* str = fmtstr("Python module does not contain \"%s\"", opname); - _SBLIM_TRACE(1,(str)); + _SBLIM_TRACE(1,("%s", str)); st->rc = CMPI_RC_ERR_FAILED; st->msg = hdl->broker->eft->newString(hdl->broker, str, NULL); free(str); @@ -363,7 +363,7 @@ { char* str = fmtstr("Python module attribute \"%s\" is not callable", opname); - _SBLIM_TRACE(1,(str)); + _SBLIM_TRACE(1,("%s", str)); st->rc = CMPI_RC_ERR_FAILED; st->msg = hdl->broker->eft->newString(hdl->broker, str, NULL); free(str); @@ -400,7 +400,7 @@ SWIG_PYTHON_THREAD_BEGIN_ALLOW; char* str = fmtstr("Python function \"%s\" didn't return a two-tuple", opname); - _SBLIM_TRACE(1,(str)); + _SBLIM_TRACE(1,("%s", str)); st->rc = CMPI_RC_ERR_FAILED; st->msg = hdl->broker->eft->newString(hdl->broker, str, NULL); free(str); @@ -419,7 +419,7 @@ { SWIG_PYTHON_THREAD_BEGIN_ALLOW; char* str = fmtstr("Python function \"%s\" didn't return a {<int>, <str>) two-tuple", opname); - _SBLIM_TRACE(1,(str)); + _SBLIM_TRACE(1,("%s", str)); st->rc = CMPI_RC_ERR_FAILED; st->msg = hdl->broker->eft->newString(hdl->broker, str, NULL); free(str); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ba...@us...> - 2008-09-17 22:07:36
|
Revision: 1004 http://omc.svn.sourceforge.net/omc/?rev=1004&view=rev Author: bartw Date: 2008-09-17 22:07:47 +0000 (Wed, 17 Sep 2008) Log Message: ----------- test enhancements Modified Paths: -------------- cmpi-bindings/trunk/test/python/TestMethod.mof cmpi-bindings/trunk/test/python/TestMethod.py Modified: cmpi-bindings/trunk/test/python/TestMethod.mof =================================================================== --- cmpi-bindings/trunk/test/python/TestMethod.mof 2008-09-17 16:40:43 UTC (rev 1003) +++ cmpi-bindings/trunk/test/python/TestMethod.mof 2008-09-17 22:07:47 UTC (rev 1004) @@ -259,6 +259,9 @@ sint32 createObjects( [in, required, EmbeddedInstance("Test_Method")] string insts[] ); + + [ Description("Return the number of instances") ] + sint32 numInsts(); [ Description("Retrieve instances of Test_Method as an instance list output parameter") ] sint32 getObjects( Modified: cmpi-bindings/trunk/test/python/TestMethod.py =================================================================== --- cmpi-bindings/trunk/test/python/TestMethod.py 2008-09-17 16:40:43 UTC (rev 1003) +++ cmpi-bindings/trunk/test/python/TestMethod.py 2008-09-17 22:07:47 UTC (rev 1004) @@ -35,7 +35,8 @@ #model['id'] = model.path['id'] model['p_sint32']=inst[1] - model['p_str']=inst[0] + model['p_str']=pywbem.CIMProperty('p_str', type='string', value=inst[0]) + #model['p_str']=inst[0] return model def enum_instances(self, env, model, keys_only): @@ -677,6 +678,13 @@ out_params = [pywbem.CIMParameter('path', 'reference', value=path)] return (rval, out_params) + def cim_method_numinsts(self, env, object_name): + logger = env.get_logger() + logger.log_debug('Entering %s.cim_method_getobjectpath()' \ + % self.__class__.__name__) + + return (pywbem.Sint32(len(g_insts)), []) + def cim_method_getobjectpaths(self, env, object_name): logger = env.get_logger() logger.log_debug('Entering %s.cim_method_getobjectpaths()' \ This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ba...@us...> - 2008-09-17 16:40:35
|
Revision: 1003 http://omc.svn.sourceforge.net/omc/?rev=1003&view=rev Author: bartw Date: 2008-09-17 16:40:43 +0000 (Wed, 17 Sep 2008) Log Message: ----------- some property list fixes Modified Paths: -------------- cmpi-bindings/trunk/swig/python/cmpi_pywbem_bindings.py cmpi-bindings/trunk/test/python/TestAtomProvider_Test.py cmpi-bindings/trunk/test/python/test_assoc.py Modified: cmpi-bindings/trunk/swig/python/cmpi_pywbem_bindings.py =================================================================== --- cmpi-bindings/trunk/swig/python/cmpi_pywbem_bindings.py 2008-09-17 04:44:36 UTC (rev 1002) +++ cmpi-bindings/trunk/swig/python/cmpi_pywbem_bindings.py 2008-09-17 16:40:43 UTC (rev 1003) @@ -41,7 +41,7 @@ def SFCBUDSConnection(): return pywbem.WBEMConnection('/tmp/sfcbHttpSocket') -class CIMInstanceNameIterator: +class CIMInstanceNameIterator(object): def __init__(self, proxy, enumeration): self.enumeration = enumeration self.proxy = proxy @@ -58,7 +58,7 @@ raise StopIteration yield self.proxy.cmpi2pywbem_instname(val) -class CIMInstanceIterator: +class CIMInstanceIterator(object): def __init__(self, proxy, enumeration): self.enumeration = enumeration self.proxy = proxy @@ -446,6 +446,8 @@ pcop = pywbem.CIMInstanceName(pinst.classname) cop = self.pywbem2cmpi_instname(pcop) cinst = self.broker.new_instance(cop) + if pinst.property_list is not None: + cinst.set_property_filter(pinst.property_list) for prop in pinst.properties.values(): data, _type = self.pywbem2cmpi_value(prop.value, _type=prop.type) ctype = _pywbem2cmpi_typemap[_type] Modified: cmpi-bindings/trunk/test/python/TestAtomProvider_Test.py =================================================================== --- cmpi-bindings/trunk/test/python/TestAtomProvider_Test.py 2008-09-17 04:44:36 UTC (rev 1002) +++ cmpi-bindings/trunk/test/python/TestAtomProvider_Test.py 2008-09-17 16:40:43 UTC (rev 1003) @@ -437,9 +437,8 @@ raise arg for prop in inst.properties.keys(): - if prop not in propertylist: - #self.fail("Property Not Found in PropertyList: %s" % prop) - print "Property Not Found in PropertyList: %s" % prop + if prop not in inst.path and prop not in propertylist: + self.fail("Property Not Found in PropertyList: %s" % prop) def test_6_modify_instance(self): Modified: cmpi-bindings/trunk/test/python/test_assoc.py =================================================================== --- cmpi-bindings/trunk/test/python/test_assoc.py 2008-09-17 04:44:36 UTC (rev 1002) +++ cmpi-bindings/trunk/test/python/test_assoc.py 2008-09-17 16:40:43 UTC (rev 1003) @@ -1143,8 +1143,9 @@ self.fail('KeyError caught trying to access properties that should exist.') isValid=False try: - if usr['UserID'] is not None: - self.fail('UserID property set when it should not be.') + # some CIMOMs always return keys . + #if usr['UserID'] is not None: + # self.fail('UserID property set when it should not be.') if usr['HomeDirectory'] is not None: self.fail('HomeDirectory property set when it should not be.') isValid=True This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ba...@us...> - 2008-09-17 04:44:25
|
Revision: 1002 http://omc.svn.sourceforge.net/omc/?rev=1002&view=rev Author: bartw Date: 2008-09-17 04:44:36 +0000 (Wed, 17 Sep 2008) Log Message: ----------- started power management profile Added Paths: ----------- pyprofiles/powerManagement/ pyprofiles/powerManagement/trunk/ pyprofiles/powerManagement/trunk/OMC_AssociatedPowerManagementService.py pyprofiles/powerManagement/trunk/OMC_HostedPowerManagementService.py pyprofiles/powerManagement/trunk/OMC_PowerManagement.mof pyprofiles/powerManagement/trunk/OMC_PowerManagement.peg.reg pyprofiles/powerManagement/trunk/OMC_PowerManagement.sfcb.reg pyprofiles/powerManagement/trunk/OMC_PowerManagementCapabilities.py pyprofiles/powerManagement/trunk/OMC_PowerManagementElementCapabilities.py pyprofiles/powerManagement/trunk/OMC_PowerManagementService.py Added: pyprofiles/powerManagement/trunk/OMC_AssociatedPowerManagementService.py =================================================================== --- pyprofiles/powerManagement/trunk/OMC_AssociatedPowerManagementService.py (rev 0) +++ pyprofiles/powerManagement/trunk/OMC_AssociatedPowerManagementService.py 2008-09-17 04:44:36 UTC (rev 1002) @@ -0,0 +1,310 @@ +"""Python Provider for OMC_AssociatedPowerManagementService + +Instruments the CIM class OMC_AssociatedPowerManagementService + +""" + +import pywbem +from pywbem.cim_provider2 import CIMProvider2 + +import OMC_PowerManagementService +get_service_path = OMC_PowerManagementService.get_path +service_id = OMC_PowerManagementService.inst_id + +from socket import getfqdn + +class OMC_AssociatedPowerManagementService(CIMProvider2): + """Instrument the CIM class OMC_AssociatedPowerManagementService + + The association between a Managed System Element and its power + management service. + + """ + + 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__) + + + # TODO fetch system resource matching the following keys: + # model['UserOfService'] + # model['ServiceProvided'] + + #model['OtherPowerState'] = '' # TODO + #model['OtherRequestedPowerState'] = '' # TODO + #model['PowerOnTime'] = pywbem.CIMDateTime() # TODO + model['PowerState'] = self.Values.PowerState.On + #model['RequestedPowerState'] = self.Values.RequestedPowerState.Not_Applicable # TODO + 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({u'UserOfService': None, u'ServiceProvided': None}) + service = pywbem.CIMInstanceName( + classname='OMC_PowerManagementService', + namespace=model.path.namespace) + get_service_path(service) + + cs = pywbem.CIMInstanceName( + classname='OMC_ComputerSystem', + namespace=model.path.namespace, + keybindings={'CreationClassName':'OMC_ComputerSystem', + 'Name':getfqdn()}) + + model['UserOfService'] = cs + model['ServiceProvided'] = service + + 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() + + # If you want to get references for free, implemented in terms + # of enum_instances, just leave the code below unaltered. + if ch.is_subclass(object_name.namespace, + sub=object_name.classname, + super='OMC_UnitaryComputerSystem') or \ + ch.is_subclass(object_name.namespace, + sub=object_name.classname, + super='OMC_PowerManagementService'): + return self.simple_refs(env, object_name, model, + result_class_name, role, result_role, keys_only) + + + class Values(object): + class PowerState(object): + Other = pywbem.Uint16(1) + On = pywbem.Uint16(2) + Sleep___Light = pywbem.Uint16(3) + Sleep__Deep = pywbem.Uint16(4) + Power_Cycle__Off___Soft_ = pywbem.Uint16(5) + Off___Hard = pywbem.Uint16(6) + Hibernate__Off___Soft_ = pywbem.Uint16(7) + Off___Soft = pywbem.Uint16(8) + Power_Cycle__Off_Hard_ = pywbem.Uint16(9) + Master_Bus_Reset = pywbem.Uint16(10) + Diagnostic_Interrupt__NMI_ = pywbem.Uint16(11) + Off___Soft_Graceful = pywbem.Uint16(12) + Off___Hard_Graceful = pywbem.Uint16(13) + Master_Bus_Reset_Graceful = pywbem.Uint16(14) + Power_Cycle__Off___Soft_Graceful_ = pywbem.Uint16(15) + Power_Cycle__Off___Hard_Graceful_ = pywbem.Uint16(16) + # DMTF_Reserved = .. + # Vendor_Specific = 0x7FFF..0xFFFF + + class RequestedPowerState(object): + Unknown = pywbem.Uint16(0) + Other = pywbem.Uint16(1) + On = pywbem.Uint16(2) + Sleep___Light = pywbem.Uint16(3) + Sleep___Deep = pywbem.Uint16(4) + Power_Cycle__Off___Soft_ = pywbem.Uint16(5) + Off___Hard = pywbem.Uint16(6) + Hibernate__Off___Soft_ = pywbem.Uint16(7) + Off___Soft = pywbem.Uint16(8) + Power_Cycle__Off_Hard_ = pywbem.Uint16(9) + Master_Bus_Reset = pywbem.Uint16(10) + Diagnostic_Interrupt__NMI_ = pywbem.Uint16(11) + Not_Applicable = pywbem.Uint16(12) + Off___Soft_Graceful = pywbem.Uint16(13) + Off___Hard_Graceful = pywbem.Uint16(14) + Master_Bus_Reset_Graceful = pywbem.Uint16(15) + Power_Cycle__Off___Soft_Graceful_ = pywbem.Uint16(16) + Power_Cycle__Off___Hard_Graceful_ = pywbem.Uint16(17) + # DMTF_Reserved = .. + # Vendor_Specific = 0x7FFF..0xFFFF + +## end of class OMC_AssociatedPowerManagementServiceProvider + +def get_providers(env): + omc_associatedpowermanagementservice_prov = OMC_AssociatedPowerManagementService(env) + return {'OMC_AssociatedPowerManagementService': omc_associatedpowermanagementservice_prov} + Added: pyprofiles/powerManagement/trunk/OMC_HostedPowerManagementService.py =================================================================== --- pyprofiles/powerManagement/trunk/OMC_HostedPowerManagementService.py (rev 0) +++ pyprofiles/powerManagement/trunk/OMC_HostedPowerManagementService.py 2008-09-17 04:44:36 UTC (rev 1002) @@ -0,0 +1,269 @@ +"""Python Provider for OMC_HostedPowerManagementService + +Instruments the CIM class OMC_HostedPowerManagementService + +""" + +import pywbem +from pywbem.cim_provider2 import CIMProvider2 + +import OMC_PowerManagementService +get_service_path = OMC_PowerManagementService.get_path +service_id = OMC_PowerManagementService.inst_id + +from socket import getfqdn + +class OMC_HostedPowerManagementServiceProvider(CIMProvider2): + """Instrument the CIM class OMC_HostedPowerManagementService + + CIM_HostedService is an association between a Service and the System on + which the functionality is located. The cardinality of this + association is one-to-many. A System can host many Services. Services + are weak with respect to their hosting System. Heuristic: A Service is + hosted on the System where the LogicalDevices or SoftwareFeatures that + implement the Service are located. The model does not represent + Services hosted across multiple systems. The model is as an + ApplicationSystem that acts as an aggregation point for Services that + are each located on a single host. + + """ + + 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__) + + + # TODO fetch system resource matching the following keys: + # model['Dependent'] + # model['Antecedent'] + + 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({u'Dependent': None, u'Antecedent': None}) + + service = pywbem.CIMInstanceName( + classname='OMC_PowerManagementService', + namespace=model.path.namespace) + get_service_path(service) + + cs = pywbem.CIMInstanceName( + classname='OMC_ComputerSystem', + namespace=model.path.namespace, + keybindings={'CreationClassName':'OMC_ComputerSystem', + 'Name':getfqdn()}) + + model['Antecedent'] = cs + model['Dependent'] = service + + 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() + + # If you want to get references for free, implemented in terms + # of enum_instances, just leave the code below unaltered. + if ch.is_subclass(object_name.namespace, + sub=object_name.classname, + super='OMC_PowerManagementService') or \ + ch.is_subclass(object_name.namespace, + sub=object_name.classname, + super='OMC_ComputerSystem'): + return self.simple_refs(env, object_name, model, + result_class_name, role, result_role, keys_only) + +## end of class OMC_HostedPowerManagementServiceProvider + +def get_providers(env): + omc_hostedpowermanagementservice_prov = OMC_HostedPowerManagementServiceProvider(env) + return {'OMC_HostedPowerManagementService': omc_hostedpowermanagementservice_prov} + Added: pyprofiles/powerManagement/trunk/OMC_PowerManagement.mof =================================================================== --- pyprofiles/powerManagement/trunk/OMC_PowerManagement.mof (rev 0) +++ pyprofiles/powerManagement/trunk/OMC_PowerManagement.mof 2008-09-17 04:44:36 UTC (rev 1002) @@ -0,0 +1,36 @@ + +class OMC_PowerManagementService : CIM_PowerManagementService +{ +}; + +class OMC_PowerManagementCapabilities : CIM_PowerManagementCapabilities +{ +}; + +[Association] +class OMC_AssociatedPowerManagementService : CIM_AssociatedPowerManagementService +{ + [override("ServiceProvided"), KEY] + OMC_PowerManagementService REF ServiceProvided; + [override("UserOfService"), KEY] + OMC_UnitaryComputerSystem REF UserOfService; +}; + +[Association] +class OMC_HostedPowerManagementService : CIM_HostedService +{ + [override("Dependent"), KEY] + OMC_PowerManagementService REF Dependent; + [override("Antededent"), KEY] + OMC_UnitaryComputerSystem REF Antecedent; +}; + +[Association] +class OMC_PowerManagementElementCapabilities : CIM_ElementCapabilities +{ + [override("ManagedElement"), KEY] + OMC_PowerManagementService REF ManagedElement; + [override("Capabilities"), KEY] + OMC_PowerManagementCapabilities REF Capabilities; +}; + Added: pyprofiles/powerManagement/trunk/OMC_PowerManagement.peg.reg =================================================================== --- pyprofiles/powerManagement/trunk/OMC_PowerManagement.peg.reg (rev 0) +++ pyprofiles/powerManagement/trunk/OMC_PowerManagement.peg.reg 2008-09-17 04:44:36 UTC (rev 1002) @@ -0,0 +1,86 @@ +// Pegasus Provider registration for OMC_PowerManagementService +instance of PG_ProviderModule +{ + Name = "pyCmpiProvider_OMC_PowerManagement"; + InterfaceType = "CMPI"; + InterfaceVersion = "2.0.0"; + Location = "pyCmpiProvider"; + UserContext = 2; // Requestor + Vendor = "SUSE"; + Version = "1.0"; +}; +instance of PG_Provider +{ + Name = "OMC_PowerManagementService"; + ProviderModuleName = "pyCmpiProvider_OMC_PowerManagement"; +}; +instance of PG_ProviderCapabilities +{ + CapabilityID = "OMC_PowerManagementService"; + ProviderModuleName = "pyCmpiProvider_OMC_PowerManagement"; + ProviderName = "OMC_PowerManagementService"; + ClassName = "OMC_PowerManagementService"; + Namespaces = {"root/cimv2"}; + ProviderType = {2,5}; // Instance, Method +}; + +instance of PG_Provider +{ + Name = "OMC_PowerManagementCapabilities"; + ProviderModuleName = "pyCmpiProvider_OMC_PowerManagement"; +}; +instance of PG_ProviderCapabilities +{ + CapabilityID = "OMC_PowerManagementCapabilities"; + ProviderModuleName = "pyCmpiProvider_OMC_PowerManagement"; + ProviderName = "OMC_PowerManagementCapabilities"; + ClassName = "OMC_PowerManagementCapabilities"; + Namespaces = {"root/cimv2"}; + ProviderType = {2,5}; // Instance, Method +}; + +instance of PG_Provider +{ + Name = "OMC_PowerManagementElementCapabilities"; + ProviderModuleName = "pyCmpiProvider_OMC_PowerManagement"; +}; +instance of PG_ProviderCapabilities +{ + CapabilityID = "OMC_PowerManagementElementCapabilities"; + ProviderModuleName = "pyCmpiProvider_OMC_PowerManagement"; + ProviderName = "OMC_PowerManagementElementCapabilities"; + ClassName = "OMC_PowerManagementElementCapabilities"; + Namespaces = {"root/cimv2"}; + ProviderType = {2,3}; // Instance, Associator +}; + +instance of PG_Provider +{ + Name = "OMC_HostedPowerManagementService"; + ProviderModuleName = "pyCmpiProvider_OMC_PowerManagement"; +}; +instance of PG_ProviderCapabilities +{ + CapabilityID = "OMC_HostedPowerManagementService"; + ProviderModuleName = "pyCmpiProvider_OMC_PowerManagement"; + ProviderName = "OMC_HostedPowerManagementService"; + ClassName = "OMC_HostedPowerManagementService"; + Namespaces = {"root/cimv2"}; + ProviderType = {2,3}; // Instance, Associator +}; + +instance of PG_Provider +{ + Name = "OMC_AssociatedPowerManagementService"; + ProviderModuleName = "pyCmpiProvider_OMC_PowerManagement"; +}; +instance of PG_ProviderCapabilities +{ + CapabilityID = "OMC_AssociatedPowerManagementService"; + ProviderModuleName = "pyCmpiProvider_OMC_PowerManagement"; + ProviderName = "OMC_AssociatedPowerManagementService"; + ClassName = "OMC_AssociatedPowerManagementService"; + Namespaces = {"root/cimv2"}; + ProviderType = {2,3}; // Instance, Associator +}; + Added: pyprofiles/powerManagement/trunk/OMC_PowerManagement.sfcb.reg =================================================================== --- pyprofiles/powerManagement/trunk/OMC_PowerManagement.sfcb.reg (rev 0) +++ pyprofiles/powerManagement/trunk/OMC_PowerManagement.sfcb.reg 2008-09-17 04:44:36 UTC (rev 1002) @@ -0,0 +1,30 @@ +[OMC_PowerManagementService] + provider: OMC_PowerManagementService + location: pyCmpiProvider + type: instance method + namespace: root/cimv2 + +[OMC_PowerManagementCapabilities] + provider: OMC_PowerManagementCapabilities + location: pyCmpiProvider + type: instance method + namespace: root/cimv2 + +[OMC_PowerManagementElementCapabilities] + provider: OMC_PowerManagementElementCapabilities + location: pyCmpiProvider + type: instance association + namespace: root/cimv2 + +[OMC_HostedPowerManagementService] + provider: OMC_HostedPowerManagementService + location: pyCmpiProvider + type: instance association + namespace: root/cimv2 + +[OMC_AssociatedPowerManagementService] + provider: OMC_AssociatedPowerManagementService + location: pyCmpiProvider + type: instance association + namespace: root/cimv2 + Added: pyprofiles/powerManagement/trunk/OMC_PowerManagementCapabilities.py =================================================================== --- pyprofiles/powerManagement/trunk/OMC_PowerManagementCapabilities.py (rev 0) +++ pyprofiles/powerManagement/trunk/OMC_PowerManagementCapabilities.py 2008-09-17 04:44:36 UTC (rev 1002) @@ -0,0 +1,297 @@ +"""Python Provider for OMC_PowerManagementCapabilities + +Instruments the CIM class OMC_PowerManagementCapabilities + +""" + +import pywbem +from pywbem.cim_provider2 import CIMProvider2 + +inst_id = 'SUSE:PowerManagementCapabilities' + +def get_path(mapping): + mapping['InstanceID'] = inst_id + return mapping + + +class OMC_PowerManagementCapabilitiesProvider(CIMProvider2): + """Instrument the CIM class OMC_PowerManagementCapabilities + + A class derived from Capabilities that describes the power management + aspects of an element (typically a system or device). The power + management capabilities of the element are decoupled from a + PowerManagementService, because a single service could apply to + multiple elements, each with specific capabilities. + + """ + + 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): + + logger = env.get_logger() + logger.log_debug('Entering %s.get_instance()' \ + % self.__class__.__name__) + + + if model['InstanceID'] != inst_id: + raise pywbem.CIMError(pywbem.CIM_ERR_NOT_FOUND) + + #model['Caption'] = '' # TODO + #model['Description'] = '' # TODO + model['ElementName'] = 'Power Management Capabilities' + #model['Generation'] = pywbem.Uint64() # TODO + #model['OtherPowerCapabilitiesDescriptions'] = ['',] # TODO + #model['OtherPowerChangeCapabilities'] = '' # TODO + #model['PowerCapabilities'] = [self.Values.PowerCapabilities.<VAL>,] # TODO + model['PowerChangeCapabilities'] = \ + [self.Values.PowerChangeCapabilities.Graceful_Shutdown_Supported, + ] + model['PowerStatesSupported'] = \ + [self.Values.PowerStatesSupported.Off___Soft_Graceful, + ] + return model + + def enum_instances(self, env, model, keys_only): + + 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({u'InstanceID': None}) + + get_path(model) + 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): + + 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): + logger = env.get_logger() + logger.log_debug('Entering %s.delete_instance()' \ + % self.__class__.__name__) + + raise pywbem.CIMError(pywbem.CIM_ERR_NOT_SUPPORTED) # Remove to implement + + def cim_method_creategoalsettings(self, env, object_name, + param_supportedgoalsettings, + param_templategoalsettings): + """Implements OMC_PowerManagementCapabilities.CreateGoalSettings() + + Method to create a set of supported SettingData elements, from two + sets of SettingData elements, provided by the caller. \nCreateGoal + should be used when the SettingData instances that represents the + goal will not persist beyond the execution of the client and where + those instances are not intended to be shared with other, + non-cooperating clients. \nBoth TemplateGoalSettings and + SupportedGoalSettings are represented as strings containing + EmbeddedInstances of a CIM_SettingData subclass. These embedded + instances do not exist in the infrastructure supporting this + method but are maintained by the caller/client. \nThis method + should return CIM_Error(s) representing that a single named + property of a setting (or other) parameter (either reference or + embedded object) has an invalid value or that an invalid + combination of named properties of a setting (or other) parameter + (either reference or embedded object) has been requested. \nIf the + input TemplateGoalSettings is NULL or the empty string, this + method returns a default SettingData element that is supported by + this Capabilities element. \nIf the TemplateGoalSettings specifies + values that cannot be supported, this method shall return an + appropriate CIM_Error and should return a best match for a + SupportedGoalSettings. \nThe client proposes a goal using the + TemplateGoalSettings parameter and gets back Success if the + TemplateGoalSettings is exactly supportable. It gets back + "Alternative Proposed" if the output SupportedGoalSettings + represents a supported alternative. This alternative should be a + best match, as defined by the implementation. \nIf the + implementation is conformant to a RegisteredProfile, then that + profile may specify the algorithms used to determine best match. A + client may compare the returned value of each property against the + requested value to determine if it is left unchanged, degraded or + upgraded. \n\nOtherwise, if the TemplateGoalSettings is not + applicable an "Invalid Parameter" error is returned. \n\nWhen a + mutually acceptable SupportedGoalSettings has been achieved, the + client may use the contained SettingData instances as input to + methods for creating a new object ormodifying an existing object. + Also the embedded SettingData instances returned in the + SupportedGoalSettings may be instantiated via CreateInstance, + either by a client or as a side-effect of the execution of an + extrinsic method for which the returned SupportedGoalSettings is + passed as an embedded instance. + + Keyword arguments: + env -- Provider Environment (pycimmb.ProviderEnvironment) + object_name -- A pywbem.CIMInstanceName or pywbem.CIMCLassName + specifying the object on which the method CreateGoalSettings() + should be invoked. + param_supportedgoalsettings -- The input parameter SupportedGoalSettings (type pywbem.CIMInstance(classname='CIM_SettingData', ...)) + SupportedGoalSettings are elements of class CIM_SettingData, or + a derived class. \nAt most, one instance of each SettingData + subclass may be supplied. \nAll SettingData instances provided + by this property are interpreted as a set, relative to this + Capabilities instance. \n\nTo enable a client to provide + additional information towards achieving the + TemplateGoalSettings, an input set of SettingData instances + may be provided. If not provided, this property shall be set + to NULL on input.. Note that when provided, what property + values are changed, and how, is implementation dependent and + may be the subject of other standards. \nIf provided, the + input SettingData instances must be ones that the + implementation is able to support relative to the + ManagedElement associated via ElementCapabilities. Typically, + the input SettingData instances are created by a previous + instantiation of CreateGoalSettings. \nIf the input + SupportedGoalSettings is not supported by the implementation, + then an "Invalid Parameter" (5) error is returned by this + call. In this case, a corresponding CIM_ERROR should also be + returned. \nOn output, this property is used to return the + best supported match to the TemplateGoalSettings. \nIf the + output SupportedGoalSettings matches the input + SupportedGoalSettings, then the implementation is unable to + improve further towards meeting the TemplateGoalSettings. + + param_templategoalsettings -- The input parameter TemplateGoalSettings (type pywbem.CIMInstance(classname='CIM_SettingData', ...)) + If provided, TemplateGoalSettings are elements of class + CIM_SettingData, or a derived class, that is used as the + template to be matched. . \nAt most, one instance of each + SettingData subclass may be supplied. \nAll SettingData + instances provided by this property are interpreted as a set, + relative to this Capabilities instance. \nSettingData + instances that are not relevant to this instance are ignored. + \nIf not provided, it shall be set to NULL. In that case, a + SettingData instance representing the default settings of the + associated ManagedElement is used. + + + Returns a two-tuple containing the return value (type pywbem.Uint16 self.Values.CreateGoalSettings) + and a list of CIMParameter objects representing the output parameters + + Output parameters: + SupportedGoalSettings -- (type pywbem.CIMInstance(classname='CIM_SettingData', ...)) + SupportedGoalSettings are elements of class CIM_SettingData, or + a derived class. \nAt most, one instance of each SettingData + subclass may be supplied. \nAll SettingData instances provided + by this property are interpreted as a set, relative to this + Capabilities instance. \n\nTo enable a client to provide + additional information towards achieving the + TemplateGoalSettings, an input set of SettingData instances + may be provided. If not provided, this property shall be set + to NULL on input.. Note that when provided, what property + values are changed, and how, is implementation dependent and + may be the subject of other standards. \nIf provided, the + input SettingData instances must be ones that the + implementation is able to support relative to the + ManagedElement associated via ElementCapabilities. Typically, + the input SettingData instances are created by a previous + instantiation of CreateGoalSettings. \nIf the input + SupportedGoalSettings is not supported by the implementation, + then an "Invalid Parameter" (5) error is returned by this + call. In this case, a corresponding CIM_ERROR should also be + returned. \nOn output, this property is used to return the + best supported match to the TemplateGoalSettings. \nIf the + output SupportedGoalSettings matches the input + SupportedGoalSettings, then the implementation is unable to + improve further towards meeting the TemplateGoalSettings. + + + Possible Errors: + CIM_ERR_ACCESS_DENIED + CIM_ERR_INVALID_PARAMETER (including missing, duplicate, + unrecognized or otherwise incorrect parameters) + CIM_ERR_NOT_FOUND (the target CIM Class or instance does not + exist in the specified namespace) + CIM_ERR_METHOD_NOT_AVAILABLE (the CIM Server is unable to honor + the invocation request) + CIM_ERR_FAILED (some other unspecified error occurred) + + """ + + logger = env.get_logger() + logger.log_debug('Entering %s.cim_method_creategoalsettings()' \ + % self.__class__.__name__) + + # TODO do something + raise pywbem.CIMError(pywbem.CIM_ERR_METHOD_NOT_AVAILABLE) # Remove to implemented + out_params = [] + #out_params+= [pywbem.CIMParameter('supportedgoalsettings', type='string', + # value=[pywbem.CIMInstance(classname='CIM_SettingData', ...),])] # TODO + #rval = # TODO (type pywbem.Uint16 self.Values.CreateGoalSettings) + return (rval, out_params) + + class Values(object): + class PowerCapabilities(object): + Unknown = pywbem.Uint16(0) + Other = pywbem.Uint16(1) + Power_Saving_Modes_Entered_Automatically = pywbem.Uint16(2) + Power_State_Settable = pywbem.Uint16(3) + Power_Cycling_Supported = pywbem.Uint16(4) + Timed_Power_On_Supported = pywbem.Uint16(5) + + class PowerStatesSupported(object): + Other = pywbem.Uint16(1) + On = pywbem.Uint16(2) + Sleep___Light = pywbem.Uint16(3) + Sleep__Deep = pywbem.Uint16(4) + Power_Cycle__Off___Soft_ = pywbem.Uint16(5) + Off___Hard = pywbem.Uint16(6) + Hibernate__Off___Soft_ = pywbem.Uint16(7) + Off___Soft = pywbem.Uint16(8) + Power_Cycle__Off_Hard_ = pywbem.Uint16(9) + Master_Bus_Reset = pywbem.Uint16(10) + Diagnostic_Interrupt__NMI_ = pywbem.Uint16(11) + Off___Soft_Graceful = pywbem.Uint16(12) + Off___Hard_Graceful = pywbem.Uint16(13) + Master_Bus_Reset_Graceful = pywbem.Uint16(14) + Power_Cycle__Off___Soft_Graceful_ = pywbem.Uint16(15) + Power_Cycle__Off___Hard_Graceful_ = pywbem.Uint16(16) + # DMTF_Reserved = .. + # Vendor_Specific = 0x7FFF..0xFFFF + + class CreateGoalSettings(object): + Success = pywbem.Uint16(0) + Not_Supported = pywbem.Uint16(1) + Unknown = pywbem.Uint16(2) + Timeout = pywbem.Uint16(3) + Failed = pywbem.Uint16(4) + Invalid_Parameter = pywbem.Uint16(5) + Alternative_Proposed = pywbem.Uint16(6) + # DMTF_Reserved = .. + # Vendor_Specific = 32768..65535 + + class PowerChangeCapabilities(object): + Unknown = pywbem.Uint16(0) + Other = pywbem.Uint16(1) + Power_Saving_Modes_Entered_Automatically = pywbem.Uint16(2) + Power_State_Settable = pywbem.Uint16(3) + Power_Cycling_Supported = pywbem.Uint16(4) + Timed_Power_On_Supported = pywbem.Uint16(5) + Off_Hard_Power_Cycling_Supported = pywbem.Uint16(6) + HW_Reset_Supported = pywbem.Uint16(7) + Graceful_Shutdown_Supported = pywbem.Uint16(8) + +## end of class OMC_PowerManagementCapabilitiesProvider + +def get_providers(env): + omc_powermanagementcapabilities_prov = OMC_PowerManagementCapabilitiesProvider(env) + return {'OMC_PowerManagementCapabilities': omc_powermanagementcapabilities_prov} + Added: pyprofiles/powerManagement/trunk/OMC_PowerManagementElementCapabilities.py =================================================================== --- pyprofiles/powerManagement/trunk/OMC_PowerManagementElementCapabilities.py (rev 0) +++ pyprofiles/powerManagement/trunk/OMC_PowerManagementElementCapabilities.py 2008-09-17 04:44:36 UTC (rev 1002) @@ -0,0 +1,186 @@ +"""Python Provider for OMC_PowerManagementElementCapabilities + +Instruments the CIM class OMC_PowerManagementElementCapabilities + +""" + +import pywbem +from pywbem.cim_provider2 import CIMProvider2 + +import OMC_PowerManagementCapabilities +get_cap_path = OMC_PowerManagementCapabilities.get_path +cap_id = OMC_PowerManagementCapabilities.inst_id + +import OMC_PowerManagementService +get_service_path = OMC_PowerManagementService.get_path +service_id = OMC_PowerManagementService.inst_id + +class OMC_PowerManagementElementCapabilitiesProvider(CIMProvider2): + """Instrument the CIM class OMC_PowerManagementElementCapabilities + + ElementCapabilities represents the association between ManagedElements + and their Capabilities. Note that the cardinality of the + ManagedElement reference is Min(1). This cardinality mandates the + instantiation of the ElementCapabilities association for the + referenced instance of Capabilities. ElementCapabilities describes the + existence requirements and context for the referenced instance of + ManagedElement. Specifically, the ManagedElement MUST exist and + provides the context for the Capabilities. + + """ + + 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): + logger = env.get_logger() + logger.log_debug('Entering %s.get_instance()' \ + % self.__class__.__name__) + + + if model['Capabilities']['instanceid'] != cap_id or \ + model['ManagedElement']['name'] != service_id: + raise pywbem.CIMError(pywbem.CIM_ERR_NOT_FOUND) + #model['Characteristics'] = [self.Values.Characteristics.<VAL>,] # TODO + return model + + def enum_instances(self, env, model, keys_only): + + 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({'Capabilities':None, 'ManagedElement':None}) + + service = pywbem.CIMInstanceName( + classname='OMC_PowerManagementService', + namespace=model.path.namespace) + get_service_path(service) + caps = pywbem.CIMInstanceName( + classname='OMC_PowerManagementCapabilities', + namespace=model.path.namespace) + get_cap_path(caps) + + model['Capabilities'] = caps + model['ManagedElement'] = service + 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): + + 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): + + logger = env.get_logger() + logger.log_debug('Entering %s.delete_instance()' \ + % self.__class__.__name__) + + 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. + assoc_class_name -- The name of the association class. + 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] assoc_class | | + | 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() + + if ch.is_subclass(object_name.namespace, + sub=object_name.classname, + super='OMC_PowerManagementCapabilities') or \ + ch.is_subclass(object_name.namespace, + sub=object_name.classname, + super='OMC_PowerManagementService'): + return self.simple_refs(env, object_name, model, + result_class_name, role, result_role, keys_only) + + + + class Values(object): + class Characteristics(object): + Default = pywbem.Uint16(2) + Current = pywbem.Uint16(3) + # DMTF_Reserved = .. + # Vendor_Specific = 32768..65535 + +## end of class OMC_PowerManagementElementCapabilitiesProvider + +def get_providers(env): + omc_powermanagementelementcapabilities_prov = OMC_PowerManagementElementCapabilitiesProvider(env) + return {'OMC_PowerManagementElementCapabilities': omc_powermanagementelementcapabilities_prov} + Added: pyprofiles/powerManagement/trunk/OMC_PowerManagementService.py =================================================================== --- pyprofiles/powerManagement/trunk/OMC_PowerManagementService.py (rev 0) +++ pyprofiles/powerManagement/trunk/OMC_PowerManagementService.py 2008-09-17 04:44:36 UTC (rev 1002) @@ -0,0 +1,784 @@ +"""Python Provider for OMC_PowerManagementService + +Instruments the CIM class OMC_PowerManagementService + +""" + +import pywbem +from pywbem.cim_provider2 import CIMProvider2 + +from socket import getfqdn + +inst_id = 'SUSE:PowerStateManagement' + +def get_path(mapping): + mapping['SystemCreationClassName'] = 'OMC_ComputerSystem' + mapping['CreationClassName'] = 'OMC_PowerManagementService' + mapping['SystemName'] = getfqdn() + mapping['Name'] = inst_id + return mapping + +class OMC_PowerManagementServiceProvider(CIMProvider2): + """Instrument the CIM class OMC_PowerManagementService + + A class derived from Service that describes power management + functionality, hosted on a System. Whether this service might be used + to affect the power state of a particular element is defined by the + CIM_ServiceAvailable ToElement association. + + """ + + 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): + + logger = env.get_logger() + logger.log_debug('Entering %s.get_instance()' \ + % self.__class__.__name__) + + if model['name'] != inst_id: + raise pywbem.CIMError(pywbem.CIM_ERR_NOT_FOUND) + + #model['AvailableRequestedStates'] = [self.Values.AvailableRequestedStates.<VAL>,] # TODO + #model['Caption'] = '' # TODO + #model['CommunicationStatus'] = self.Values.CommunicationStatus.<VAL> # TODO + #model['Description'] = '' # TODO + #model['DetailedStatus'] = self.Values.DetailedStatus.<VAL> # TODO + #model['ElementName'] = '' # TODO + #model['EnabledDefault'] = self.Values.EnabledDefault.Enabled # TODO + #model['EnabledState'] = self.Values.EnabledState.Not_Applicable # TODO + #model['Generation'] = pywbem.Uint64() # TODO + #model['HealthState'] = self.Values.HealthState.<VAL> # TODO + #model['InstallDate'] = pywbem.CIMDateTime() # TODO + #model['InstanceID'] = '' # TODO + #model['OperatingStatus'] = self.Values.OperatingStatus.<VAL> # TODO + #model['OperationalStatus'] = [self.Values.OperationalStatus.<VAL>,] # TODO + #model['OtherEnabledState'] = '' # TODO + #model['PrimaryOwnerContact'] = '' # TODO + #model['PrimaryOwnerName'] = '' # TODO + #model['PrimaryStatus'] = self.Values.PrimaryStatus.<VAL> # TODO +... [truncated message content] |
From: <np...@us...> - 2008-09-16 23:28:56
|
Revision: 1001 http://omc.svn.sourceforge.net/omc/?rev=1001&view=rev Author: npaxton Date: 2008-09-16 23:29:06 +0000 (Tue, 16 Sep 2008) Log Message: ----------- refactor enumerate instances/instancenames to a generator; refactor UpcallAtomProvider accordingly Modified Paths: -------------- cmpi-bindings/trunk/swig/python/cmpi_pywbem_bindings.py cmpi-bindings/trunk/test/python/UpcallAtomProvider.py Modified: cmpi-bindings/trunk/swig/python/cmpi_pywbem_bindings.py =================================================================== --- cmpi-bindings/trunk/swig/python/cmpi_pywbem_bindings.py 2008-09-16 21:38:01 UTC (rev 1000) +++ cmpi-bindings/trunk/swig/python/cmpi_pywbem_bindings.py 2008-09-16 23:29:06 UTC (rev 1001) @@ -50,20 +50,14 @@ return self def next(self): - if not self.enumeration: - return None - if not self.enumeration.hasNext(): - raise StopIteration - val = getattr(self.enumeration.next().value, 'ref') - if val is None: - raise StopIteration - return self.proxy.cmpi2pywbem_instname(val) + if self.enumeration: + if not self.enumeration.hasNext(): + raise StopIteration + val = getattr(self.enumeration.next().value, 'ref') + if val is None: + raise StopIteration + yield self.proxy.cmpi2pywbem_instname(val) - def length(self): - if not self.enumeration: - return 0 - return self.enumeration.toArray().size() - class CIMInstanceIterator: def __init__(self, proxy, enumeration): self.enumeration = enumeration @@ -73,20 +67,14 @@ return self def next(self): - if not self.enumeration: - return None - if not self.enumeration.hasNext(): - raise StopIteration - val = getattr(self.enumeration.next().value, 'inst') - if val is None: - raise StopIteration - return self.proxy.cmpi2pywbem_inst(val) + if self.enumeration: + if not self.enumeration.hasNext(): + raise StopIteration + val = getattr(self.enumeration.next().value, 'inst') + if val is None: + raise StopIteration + yield self.proxy.cmpi2pywbem_instname(val) - def length(self): - if not self.enumeration: - return 0 - return self.enumeration.toArray().size() - class BrokerCIMOMHandle(object): def __init__(self, proxy, ctx): self.broker = proxy.broker @@ -96,17 +84,24 @@ def EnumerateInstanceNames(self, ns, cn): cop = self.broker.new_object_path(ns, cn) e = self.broker.enumInstanceNames(self.ctx, cop) - return CIMInstanceNameIterator(self.proxy, e) + while e and e.hasNext(): + data=e.next() + assert(data.type == cmpi.CMPI_ref) + piname=self.proxy.cmpi2pywbem_instname(data.value.ref) + yield piname def EnumerateInstances(self, ns, cn, props = None): cop = self.broker.new_object_path(ns, cn) e = self.broker.enumInstances(self.ctx, cop, props) - return CIMInstanceIterator(self.proxy, e) + while e and e.hasNext(): + data=e.next() + assert(data.type == cmpi.CMPI_instance) + pinst=self.proxy.cmpi2pywbem_inst(data.value.inst) + yield pinst def GetInstance(self, path, props = None): cop = self.proxy.pywbem2cmpi_instname(path) ci = self.broker.getInstance(self.ctx, cop, props) - print " --> ci=%s" %(ci) if ci is None: return None return self.proxy.cmpi2pywbem_inst(ci) @@ -129,7 +124,16 @@ pass def ReferenceNames(self): pass - def InvokeMethod(self): + def InvokeMethod(self, path, method, args): + ''' + cop = self.proxy.pywbem2cmpi_instname(path) + self.proxy.pywbem2cmpi_args(args, inargs) + poutargs=cmpi.CMPIArgs() + rc=self.broker.invokeMethod(self.ctx, cop, method, inargs, poutargs) + outargs = self.proxy.cmpi2pywbem_args(poutargs) + rslt = (rc,outargs) + return rslt + ''' pass def GetClass(self, *args, **kwargs): raise pywbem.CIMError(pywbem.CIM_ERR_NOT_SUPPORTED) Modified: cmpi-bindings/trunk/test/python/UpcallAtomProvider.py =================================================================== --- cmpi-bindings/trunk/test/python/UpcallAtomProvider.py 2008-09-16 21:38:01 UTC (rev 1000) +++ cmpi-bindings/trunk/test/python/UpcallAtomProvider.py 2008-09-16 23:29:06 UTC (rev 1001) @@ -392,29 +392,32 @@ #Written to test associators of Linux_UnixProcess class # try: + ''' logger.log_debug("Getting AssociatorNames") ci_list = ch.EnumerateInstanceNames(ch.default_namespace, "Linux_UnixProcess") - if ci_list and ci_list.length() > 0: + if ci_list: ci_entry=ci_list.next() assoc_names = ch.AssociatorNames(ci_entry,\ assocClass="Linux_OSProcess") #AssocNames - if assoc_names and assoc_names.length() > 0: + if assoc_names: #Linux_UnixProcess has an association through Linux_OSProcess #1. Linux_OperatingSystem for name in assoc_names: + print "****** Got name: type: %s name: %s" %(type(name), name) if name['CSCreationClassName'] != 'Linux_UnitaryComputerSystem' \ and name['CreationClassName'] != 'Linux_OperatingSystem': raise "AssociatorName Error: %s" %str(name) assoc = ch.AssociatorNames(ci_entry, \ assocClass="Linux_ProcessExecutable")#Assoc - if assoc and assoc_names.length() > 0: + if assoc: #Linux_UnixProcess has an association through Linux_ProcessExecutable #1. Linux_LinuxDataFile for inst in assoc: if inst['CSCreationClassName'] != 'CIM_UnitaryComputerSystem' \ and inst['CreationClassName'] != 'Linux_LinuxDataFile': raise "Associator Error: %s" %str(inst) + ''' # #CreateClass Method @@ -548,42 +551,52 @@ # #InvokeMethod # + ''' try: - logger.log_debug("**** Calling EnumInstances ****") - list = ch.EnumerateInstanceNames(ch.default_namespace, "Novell_DCAMStatGatheringService") - if list and list.length() > 0: + logger.log_debug("**** Testing InvokeMethod ****") + + new_instance = pywbem.CIMInstance('Test_Method') + new_instance['id'] = '1' + new_instance['p_sint32'] = '1' + new_instance['p_str'] = 'str' + cop = pywbem.CIMInstanceName(namespace=ch.default_namespace, classname='Test_Method') + cop['id'] = '1' + new_instance.path = cop + cipath=ch.CreateInstance(cop, new_instance) + new_instance.path = cipath + + inamelist = ch.EnumerateInstanceNames(ch.default_namespace, "Test_Method") + if inamelist: logger.log_debug("**** Calling GetINstance ****") - list_entry = list.next() - service = ch.GetInstance(list_entry) - if service: - if service['Started']: - ch.InvokeMethod("StopService", list_entry) - else: - ch.InvokeMethod("StartService", list.entry) + for list_entry in inamelist: + entry = ch.GetInstance(list_entry) + if entry: + rc,outArgs = ch.InvokeMethod("setStrProp", list_entry, value='newstr') logger.log_debug("**** #2:Calling EnumInstances ****") - list = ch.EnumerateInstanceNames(ch.default_namespace, "Novell_DCAMStatGatheringService") - if list and list.length() > 0: - logger.log_debug("**** #2:Calling GetInstance ****") - list_entry = list.next() - service = ch.GetInstance(list_entry) - if service: - if service['Started']: - pass - else: - ch.InvokeMethod("StartService", list_entry) + inamelist = ch.EnumerateInstanceNames(ch.default_namespace, "Novell_DCAMStatGatheringService") + if inamelist: + for list_entry in inamelist: + logger.log_debug("**** #2:Calling GetInstance ****") + list_entry = inamelist.next() + service = ch.GetInstance(list_entry) + if service: + if service['Started']: + pass + else: + ch.InvokeMethod("StartService", list_entry) except pywbem.CIMError, arg: logger.log_debug("**** CIMError: ch.InvokeMethod ****") - + ''' #ReferenceNames try: stat_list = ch.EnumerateInstanceNames(ch.default_namespace, "Novell_DCAMStatDef") - if stat_list and stat_list.length() > 0: + if stat_list: for statdef in stat_list: if statdef['DefinitionID'] == "machine_type": ref_list = ch.ReferenceNames(statdef) - if ref_list and ref_list.length() > 0: + if ref_list: for ref in ref_list: cn = ref.classname if cn == "Novell_DCAMCurrentValueForStatDef" or\ @@ -600,11 +613,11 @@ #Reference try: stat_list = ch.EnumerateInstanceNames(ch.default_namespace, "Novell_DCAMStatDef") - if stat_list and stat_list.length() > 0: + if stat_list: for statdef in stat_list: if statdef['DefinitionID'] == "machine_type": ref_list = ch.References(statdef) - if ref_list and ref_list.length() > 0: + if ref_list: for ref in ref_list: cn = ref.classname if cn == "Novell_DCAMCurrentValueForStatDef" or\ @@ -627,8 +640,8 @@ ################################################################################ # #test_2_create_instance + ''' print "####### test_2_create_instance #######" - ''' try: insts = _setup(ch, time, env) for inst in insts: @@ -646,21 +659,17 @@ # storage dictionary print "####### test_3_enum_instances #######" insts = _setup(ch, time, env) - paths = [] - ta_list = [] - try: - ta_list = ch.EnumerateInstances(ch.default_namespace, 'Test_Atom') - except pywbem.CIMError, arg: - raise 'EnumerateInstances failed: %s' % str(arg) - try: - paths = ch.EnumerateInstanceNames(ch.default_namespace, 'Test_Atom') - except pywbem.CIMError, arg: - raise 'EnumerateInstanceNames failed: %s' % str(arg) - - if paths.length() != ta_list.length(): + + ta_list = ch.EnumerateInstances(ch.default_namespace, 'Test_Atom') + paths = ch.EnumerateInstanceNames(ch.default_namespace, 'Test_Atom') + lTAList=list(ta_list) + lNames=list(paths) + print "ta_list: %d paths: %d" %(len(lTAList), len(lNames)) + + if len(lNames) != len(lTAList): raise 'EnumerateInstances (%d) returned different number of '\ - 'results than EnumerateInstanceNames (%d)' %(ta_list.length(), paths.length()) - + 'results than EnumerateInstanceNames (%d)' %(len(lTAList), len(lNames)) + for ci in insts:#Loop through instances for rci in ch.EnumerateInstances(ch.default_namespace, 'Test_Atom'): if rci.path != ci.path: @@ -692,9 +701,12 @@ except pywbem.CIMError, arg: raise 'EnumerateInstances Failed: %s' % str(arg) - if instances.length() != ta_list.length(): - raise 'EnumerateInstances returned different number of '\ - 'results than EnumerateInstanceNames' + lTAList=list(ta_list) + lInsts=list(instances) + + if len(lInsts) != len(lTAList): + raise 'EnumerateInstances (%d) returned different number of '\ + 'results than EnumerateInstanceNames (%d)' %(len(lInsts), len(lTAList)) for ci in insts: for path in ch.EnumerateInstanceNames(ch.default_namespace, 'Test_Atom'): @@ -727,13 +739,15 @@ if inst: for prop in inst.properties.keys(): if prop not in propertylist: - #raise "Property Not Found in PropertyList: " % prop + #raise "Property Not Found in PropertyList: %s" % prop + print "Property Not Found in PropertyList: %s" % prop + continue _cleanup(ch) ################################################################################ #test_6_modify_instance + ''' print "####### test_6_modify_instance ########" - ''' #Create an instance of "Boron" and then modify it to Helium # Once modified, get_instance returns it and then check the values of it rinst = _create_test_instance(ch, 'Boron', 5, time) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ba...@us...> - 2008-09-16 21:37:50
|
Revision: 1000 http://omc.svn.sourceforge.net/omc/?rev=1000&view=rev Author: bartw Date: 2008-09-16 21:38:01 +0000 (Tue, 16 Sep 2008) Log Message: ----------- split a test into two Modified Paths: -------------- cmpi-bindings/trunk/test/python/TestMethod_Test.py Modified: cmpi-bindings/trunk/test/python/TestMethod_Test.py =================================================================== --- cmpi-bindings/trunk/test/python/TestMethod_Test.py 2008-09-16 20:47:06 UTC (rev 999) +++ cmpi-bindings/trunk/test/python/TestMethod_Test.py 2008-09-16 21:38:01 UTC (rev 1000) @@ -488,7 +488,7 @@ self.assertEquals(outs['med'], 5) - def test_xembeddedinst(self): + def test_xembeddedinst_input_params(self): iname = pywbem.CIMInstanceName('Test_Method', namespace='root/cimv2', keybindings = {'id':'one'}) inst = pywbem.CIMInstance('Test_Method', path=None, @@ -518,12 +518,34 @@ self.assertEquals(ninst['p_str'], 'str2') self.assertEquals(ninst['p_sint32'], 2) - try: - rv, outs = self.conn.InvokeMethod('getObjects', 'Test_Method') - except: - raise + + def test_xembeddedinst_output_params(self): + iname = pywbem.CIMInstanceName('Test_Method', namespace='root/cimv2', + keybindings = {'id':'one'}) + inst = pywbem.CIMInstance('Test_Method', path=None, + properties={'p_str':'str1', 'p_sint32':pywbem.Sint32(1)}) + inst.update(iname) + + iname2 = pywbem.CIMInstanceName('Test_Method', namespace='root/cimv2', + keybindings = {'id':'two'}) + inst2 = pywbem.CIMInstance('Test_Method', path=None, + properties={'p_str':'str2', 'p_sint32':pywbem.Sint32(2)}) + inst2.update(iname2) + + + rv, outs = self.conn.InvokeMethod('createObjects', 'Test_Method', + insts=[inst, inst2]) + + rv, outs = self.conn.InvokeMethod('getObjects', 'Test_Method') insts = outs['insts'] self.assertEquals(len(insts), 2) + insts.sort() + self.assertEquals(insts[0]['id'], 'one') + self.assertEquals(insts[0]['p_str'], 'str1') + self.assertEquals(insts[0]['p_sint32'], 1) + self.assertEquals(insts[0]['id'], 'two') + self.assertEquals(insts[1]['p_str'], 'str2') + self.assertEquals(insts[1]['p_sint32'], 2) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ba...@us...> - 2008-09-16 20:02:59
|
Revision: 995 http://omc.svn.sourceforge.net/omc/?rev=995&view=rev Author: bartw Date: 2008-09-16 20:03:07 +0000 (Tue, 16 Sep 2008) Log Message: ----------- ported to new interface Modified Paths: -------------- pyprofiles/pysoftware/trunk/OMC_InstalledRPMSoftwareIdentity.py pyprofiles/pysoftware/trunk/OMC_RPMContainsFile.py pyprofiles/pysoftware/trunk/OMC_RPMSoftwareIdentity.py pyprofiles/pysoftware/trunk/setup.py Added Paths: ----------- pyprofiles/pysoftware/trunk/MANIFEST.in pyprofiles/pysoftware/trunk/OMC_SoftwareInventory.sfcb.reg pyprofiles/pysoftware/trunk/cmpi-pywbem-software-inventory.spec Removed Paths: ------------- pyprofiles/pysoftware/trunk/MANIFEST pyprofiles/pysoftware/trunk/omc-pysoftware-providers.spec Deleted: pyprofiles/pysoftware/trunk/MANIFEST =================================================================== --- pyprofiles/pysoftware/trunk/MANIFEST 2008-09-16 18:08:06 UTC (rev 994) +++ pyprofiles/pysoftware/trunk/MANIFEST 2008-09-16 20:03:07 UTC (rev 995) @@ -1,11 +0,0 @@ -OMC_Software.mof -OMC_RPMSoftwareIdentity.mof -OMC_RPMSoftwareIdentity.py -OMC_RPMSoftwareIdentity.reg -OMC_InstalledRPMSoftwareIdentity.mof -OMC_InstalledRPMSoftwareIdentity.py -OMC_InstalledRPMSoftwareIdentity.reg -OMC_RPMContainsFile.mof -OMC_RPMContainsFile.py -OMC_RPMContainsFile.reg -setup.py Added: pyprofiles/pysoftware/trunk/MANIFEST.in =================================================================== --- pyprofiles/pysoftware/trunk/MANIFEST.in (rev 0) +++ pyprofiles/pysoftware/trunk/MANIFEST.in 2008-09-16 20:03:07 UTC (rev 995) @@ -0,0 +1,2 @@ +include *.reg +include *.mof Modified: pyprofiles/pysoftware/trunk/OMC_InstalledRPMSoftwareIdentity.py =================================================================== --- pyprofiles/pysoftware/trunk/OMC_InstalledRPMSoftwareIdentity.py 2008-09-16 18:08:06 UTC (rev 994) +++ pyprofiles/pysoftware/trunk/OMC_InstalledRPMSoftwareIdentity.py 2008-09-16 20:03:07 UTC (rev 995) @@ -4,11 +4,12 @@ """ +from pywbem.cim_provider2 import CIMProvider2 import pywbem import OMC_RPMSoftwareIdentity from socket import getfqdn -class OMC_InstalledRPMSoftwareIdentityProvider(pywbem.CIMProvider): +class OMC_InstalledRPMSoftwareIdentityProvider(CIMProvider2): """Instrument the CIM class OMC_InstalledRPMSoftwareIdentity The InstalledSoftwareIdentity association identifies the System on @@ -28,29 +29,7 @@ # parameters, set self.filter_results to False # self.filter_results = False - def get_instance(self, env, model, cim_class): - """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. - cim_class -- The pywbem.CIMClass - - 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) - - """ + def get_instance(self, env, model): logger = env.get_logger() logger.log_debug('Entering %s.get_instance()' \ @@ -58,81 +37,33 @@ return model - def enum_instances(self, env, model, cim_class, keys_only): - """Enumerate instances. + def enum_instances(self, env, model, keys_only): - 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. - cim_class -- The pywbem.CIMClass - 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__) - cs = pywbem.CIMInstanceName(classname='OMC_UnitaryComputerSystem', + model.path.update({'InstalledSoftware':None, 'System':None}) + cs = pywbem.CIMInstanceName(classname='OMC_ComputerSystem', namespace=model.path.namespace, - keybindings={'CreationClassName':'OMC_UnitaryComputerSystem', + keybindings={'CreationClassName':'OMC_ComputerSystem', 'Name':getfqdn()}) model['System'] = cs iname = pywbem.CIMInstanceName(classname='OMC_RPMSoftwareIdentity', namespace=model.path.namespace) - for iname in OMC_RPMSoftwareIdentity.OMC_RPMSoftwareIdentityProvider.enum_instances(env, iname, None, True): + for iname in OMC_RPMSoftwareIdentity.OMC_RPMSoftwareIdentityProvider.enum_instances(env, iname, True): model['InstalledSoftware'] = iname if keys_only: yield model else: try: - yield self.get_instance(env, model, cim_class) + 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, previous_instance, cim_class): - """Return a newly created or modified instance. + def set_instance(self, env, instance, previous_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. - previous_instance -- The previous pywbem.CIMInstance if modifying - an existing instance. None if creating a new instance. - cim_class -- The pywbem.CIMClass - - 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 previous_instance is None, indicating that the operation - was CreateInstance) - CIM_ERR_NOT_FOUND (the CIM Instance does not exist -- only valid - if previous_instance is not None, 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__) @@ -141,27 +72,7 @@ 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__) @@ -169,91 +80,35 @@ # TODO delete the resource raise pywbem.CIMError(pywbem.CIM_ERR_NOT_SUPPORTED) # Remove to implement - def references(self, env, object_name, model, assoc_class, + 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. - assoc_class -- The pywbem.CIMClass. - 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] assoc_class | | - | 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() # This is a common pattern. YMMV + model.path.update({'InstalledSoftware':None, 'System':None}) if (not role or role.lower() == 'installedsoftware') and \ - pywbem.is_subclass(ch, object_name.namespace, + ch.is_subclass(object_name.namespace, sub=object_name.classname, super='OMC_RPMSoftwareIdentity'): model['InstalledSoftware'] = object_name - cs = pywbem.CIMInstanceName(classname='OMC_UnitaryComputerSystem', + cs = pywbem.CIMInstanceName(classname='OMC_ComputerSystem', namespace=object_name.namespace, - keybindings={'CreationClassName':'OMC_UnitaryComputerSystem' , + keybindings={'CreationClassName':'OMC_ComputerSystem' , 'Name':getfqdn()}) model['System'] = cs yield model if (not role or role.lower() == 'system') and \ - pywbem.is_subclass(ch, object_name.namespace, + ch.is_subclass(object_name.namespace, sub=object_name.classname, - super='OMC_UnitaryComputerSystem'): + super='OMC_ComputerSystem'): model['System'] = object_name iname = pywbem.CIMInstanceName(classname='OMC_RPMSoftwareIdentity', namespace=object_name.namespace) - for iname in OMC_RPMSoftwareIdentity.OMC_RPMSoftwareIdentityProvider.enum_instances(env, iname, None, True): + for iname in OMC_RPMSoftwareIdentity.OMC_RPMSoftwareIdentityProvider.enum_instances(env, iname, True): model['InstalledSoftware'] = iname yield model Modified: pyprofiles/pysoftware/trunk/OMC_RPMContainsFile.py =================================================================== --- pyprofiles/pysoftware/trunk/OMC_RPMContainsFile.py 2008-09-16 18:08:06 UTC (rev 994) +++ pyprofiles/pysoftware/trunk/OMC_RPMContainsFile.py 2008-09-16 20:03:07 UTC (rev 995) @@ -4,12 +4,13 @@ """ +from pywbem.cim_provider2 import CIMProvider2 import pywbem import rpm import OMC_RPMSoftwareIdentity import OMC_LogicalFile -class OMC_RPMContainsFileProvider(pywbem.CIMProvider): +class OMC_RPMContainsFileProvider(CIMProvider2): """Instrument the CIM class OMC_RPMContainsFile OMC_RPMContainsFile is used to associate RPMs with the files they @@ -21,34 +22,8 @@ logger = env.get_logger() logger.log_debug('Initializing provider %s from %s' \ % (self.__class__.__name__, __file__)) - # If you will be filtering instances yourself according to - # property_list, role, result_role, and result_class_name - # parameters, set self.filter_results to False - # self.filter_results = False - def get_instance(self, env, model, cim_class): - """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. - cim_class -- The pywbem.CIMClass - - 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) - - """ + def get_instance(self, env, model): logger = env.get_logger() logger.log_debug('Entering %s.get_instance()' \ @@ -56,30 +31,8 @@ return model - def enum_instances(self, env, model, cim_class, keys_only): - """Enumerate instances. + def enum_instances(self, env, model, keys_only): - 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. - cim_class -- The pywbem.CIMClass - 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__) @@ -93,41 +46,14 @@ yield model else: try: - yield self.get_instance(env, model, cim_class) + 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, previous_instance, cim_class): - """Return a newly created or modified instance. + def set_instance(self, env, instance, modify_existing): - 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. - previous_instance -- The previous pywbem.CIMInstance if modifying - an existing instance. None if creating a new instance. - cim_class -- The pywbem.CIMClass - - 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 previous_instance is None, indicating that the operation - was CreateInstance) - CIM_ERR_NOT_FOUND (the CIM Instance does not exist -- only valid - if previous_instance is not None, 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__) @@ -136,27 +62,7 @@ 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__) @@ -164,72 +70,16 @@ # TODO delete the resource raise pywbem.CIMError(pywbem.CIM_ERR_NOT_SUPPORTED) # Remove to implement - def references(self, env, object_name, model, assoc_class, + 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. - assoc_class -- The pywbem.CIMClass. - 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] assoc_class | | - | 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() + model.path.update({'GroupComponent':None, 'PartComponent':None}) if (not role or role.lower() == 'groupcomponent') and \ - pywbem.is_subclass(ch, object_name.namespace, + ch.is_subclass(object_name.namespace, sub=object_name.classname, super='OMC_RPMSoftwareIdentity'): model['GroupComponent'] = object_name @@ -242,7 +92,7 @@ yield model if (not role or role.lower() == 'partcomponent') and \ - pywbem.is_subclass(ch, object_name.namespace, + ch.is_subclass(object_name.namespace, sub=object_name.classname, super='CIM_LogicalFile'): model['PartComponent'] = object_name Modified: pyprofiles/pysoftware/trunk/OMC_RPMSoftwareIdentity.py =================================================================== --- pyprofiles/pysoftware/trunk/OMC_RPMSoftwareIdentity.py 2008-09-16 18:08:06 UTC (rev 994) +++ pyprofiles/pysoftware/trunk/OMC_RPMSoftwareIdentity.py 2008-09-16 20:03:07 UTC (rev 995) @@ -4,6 +4,7 @@ """ +from pywbem.cim_provider2 import CIMProvider2 import pywbem import rpm @@ -44,7 +45,7 @@ hdr[rpm.RPMTAG_RELEASE], epoch, hdr[rpm.RPMTAG_ARCH]) -class OMC_RPMSoftwareIdentityProvider(pywbem.CIMProvider): +class OMC_RPMSoftwareIdentityProvider(CIMProvider2): r"""Instrument the CIM class OMC_RPMSoftwareIdentity SoftwareIdentity provides descriptive information about a software @@ -92,52 +93,30 @@ # parameters, set self.filter_results to False # self.filter_results = False - def get_instance(self, env, model, cim_class, hdr=None): - """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. - cim_class -- The pywbem.CIMClass - hdr -- rpm.hdr object, or None - - 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) - - """ + @classmethod + def get_instance(cls, env, model, hdr=None): logger = env.get_logger() logger.log_debug('Entering %s.get_instance()' \ - % self.__class__.__name__) + % cls.__class__.__name__) if hdr is None: hdr = get_rpm_hdr(model['instanceid']) if hdr is None: raise pywbem.CIMError(pywbem.CIM_ERR_NOT_FOUND, id) - ux = model.update_existing + ux = model.update #ux(BuildNumber = # TODO (type = pywbem.Uint16) ux(Caption= hdr[rpm.RPMTAG_SUMMARY].decode('latin_1','xmlcharrefreplace')) #ux(ClassificationDescriptions= # TODO (type = [unicode,]) ) - ux(Classifications= [self.Values.Classifications.Application_Software]) + ux(Classifications= [cls.Values.Classifications.Application_Software]) ux(Description= hdr[rpm.RPMTAG_DESCRIPTION].decode('latin_1','xmlcharrefreplace')) #ux(Description= hdr[rpm.RPMTAG_DESCRIPTION]) ux(ElementName= '%s-%s-%s' % (hdr[rpm.RPMTAG_NAME], hdr[rpm.RPMTAG_VERSION], hdr[rpm.RPMTAG_RELEASE])) - #ux(ExtendedResourceType= # TODO (type = pywbem.Uint16 self.Values.ExtendedResourceType) ) - #ux(HealthState= # TODO (type = pywbem.Uint16 self.Values.HealthState) ) + #ux(ExtendedResourceType= # TODO (type = pywbem.Uint16 cls.Values.ExtendedResourceType) ) + #ux(HealthState= # TODO (type = pywbem.Uint16 cls.Values.HealthState) ) #ux(IdentityInfoType= # TODO (type = [unicode,]) ) #ux(IdentityInfoValue= # TODO (type = [unicode,]) ) ux(InstallDate= pywbem.CIMDateTime.fromtimestamp(hdr[rpm.RPMTAG_INSTALLTIME])) @@ -151,7 +130,7 @@ #ux(MinExtendedResourceTypeRevisionNumber= # TODO (type = pywbem.Uint16) ) #ux(MinorVersion= # TODO (type = pywbem.Uint16) ) ux(Name= hdr['name']) - ux(OperationalStatus= [self.Values.OperationalStatus.In_Service]) + ux(OperationalStatus= [cls.Values.OperationalStatus.In_Service]) #ux(OtherExtendedResourceTypeDescription= # TODO (type = unicode) ) ux(ReleaseDate= pywbem.CIMDateTime.fromtimestamp(hdr[rpm.RPMTAG_BUILDTIME])) ux(ReleaseString= hdr['release']) @@ -159,44 +138,25 @@ serial = hdr[rpm.RPMTAG_SERIAL] if serial: ux(SerialNumber= serial) - #ux(Status= # TODO (type = unicode self.Values.Status) ) + #ux(Status= # TODO (type = unicode cls.Values.Status) ) #ux(StatusDescriptions= # TODO (type = [unicode,]) ) #ux(TargetOperatingSystems= # TODO (type = [unicode,]) ) - ux(TargetOSTypes= [self.Values.TargetOSTypes.LINUX]) + ux(TargetOSTypes= [cls.Values.TargetOSTypes.LINUX]) ux(TargetTypes= ['RPM']) ux(VersionString= hdr['version']) return model - def enum_instances(self, env, model, cim_class, keys_only): - """Enumerate instances. + @classmethod + def enum_instances(cls, env, model, keys_only): - 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. - cim_class -- The pywbem.CIMClass - 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__) + % cls.__class__.__name__) ts = rpm.ts() mi = ts.dbMatch() + if hasattr(model, 'path'): + model.path.update({'InstanceID':None}) for hdr in mi: epoch = hdr[rpm.RPMTAG_EPOCH] if epoch is None: @@ -210,41 +170,14 @@ yield model else: try: - yield self.get_instance(env, model, cim_class, hdr) + yield cls.get_instance(env, model, hdr) 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, previous_instance, cim_class): - """Return a newly created or modified instance. + def set_instance(self, env, instance, modify_existing): - 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. - previous_instance -- The previous pywbem.CIMInstance if modifying - an existing instance. None if creating a new instance. - cim_class -- The pywbem.CIMClass - - 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 previous_instance is None, indicating that the operation - was CreateInstance) - CIM_ERR_NOT_FOUND (the CIM Instance does not exist -- only valid - if previous_instance is not None, 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__) @@ -253,27 +186,7 @@ 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__) Added: pyprofiles/pysoftware/trunk/OMC_SoftwareInventory.sfcb.reg =================================================================== --- pyprofiles/pysoftware/trunk/OMC_SoftwareInventory.sfcb.reg (rev 0) +++ pyprofiles/pysoftware/trunk/OMC_SoftwareInventory.sfcb.reg 2008-09-16 20:03:07 UTC (rev 995) @@ -0,0 +1,19 @@ +[OMC_InstalledRPMSoftwareIdentity] + provider: OMC_InstalledRPMSoftwareIdentity + location: pyCmpiProvider + type: instance association + namespace: root/cimv2 + +[OMC_RPMContainsFile] + provider: OMC_RPMContainsFile + location: pyCmpiProvider + type: instance association + namespace: root/cimv2 + +[OMC_RPMSoftwareIdentity] + provider: OMC_RPMSoftwareIdentity + location: pyCmpiProvider + type: instance + namespace: root/cimv2 + + Copied: pyprofiles/pysoftware/trunk/cmpi-pywbem-software-inventory.spec (from rev 958, pyprofiles/pysoftware/trunk/omc-pysoftware-providers.spec) =================================================================== --- pyprofiles/pysoftware/trunk/cmpi-pywbem-software-inventory.spec (rev 0) +++ pyprofiles/pysoftware/trunk/cmpi-pywbem-software-inventory.spec 2008-09-16 20:03:07 UTC (rev 995) @@ -0,0 +1,81 @@ +# +# spec file for package python-pywbem (Version 0.5) +# +# Copyright (c) 2007 SUSE LINUX Products GmbH, Nuernberg, Germany. +# This file and all modifications and additions to the pristine +# package are under the same license as the package itself. +# +# Please submit bugfixes or comments via http://bugs.opensuse.org/ +# + +# norootforbuild + +Name: cmpi-pywbem-software-inventory +BuildRequires: sblim-sfcb +Version: 0.2.0 +Release: 2 +Group: System/Management +Summary: Instrumentation for DMTF Software Inventory Profile (DSP1023) +License: BSD +URL: http://omc-project.org/ +BuildArch: noarch +Source0: %{name}-%{version}.tar.gz +PreReq: /usr/bin/peg-loadmof.sh +Requires: python-pywbem cmpi-bindings-pywbem +Requires: cmpi-pywbem-base rpm-python +BuildRoot: %{_tmppath}/%{name}-%{version}-build + +%description +Instrumentation for DMTF Software Inventory Profile (DSP1023) + + +Authors: +-------- + Bart Whiteley + +%prep +%setup + +%build +python setup.py build + +%install +# http://lists.opensuse.org/opensuse-packaging/2007-02/msg00005.html +%{__rm} -rf $RPM_BUILD_ROOT +%{__mkdir} $RPM_BUILD_ROOT +python setup.py install --prefix=%{_prefix} --root $RPM_BUILD_ROOT \ + --install-lib=/usr/lib/pycim -O1 +%{__mkdir} -p $RPM_BUILD_ROOT/usr/share/mof/%{name} +install *.{mof,reg} $RPM_BUILD_ROOT/usr/share/mof/%{name}/ + +# END OF INSTALL + +%clean +%{__rm} -rf $RPM_BUILD_ROOT + +%files +%defattr(-,root,root,-) +/usr/lib/pycim/* +/usr/share/mof/%{name}/*.mof +/usr/share/mof/%{name}/*.reg + +%pre +if [ $1 -gt 1 ]; then + peg-loadmof.sh -r -n root/cimv2 /usr/share/mof/%{name}/OMC_Software.mof + peg-loadmof.sh -r -n root/PG_InterOp /usr/share/mof/%{name}/*-peg.reg +fi + +%post +peg-loadmof.sh -n root/cimv2 /usr/share/mof/%{name}/OMC_Software.mof +peg-loadmof.sh -n root/PG_InterOp /usr/share/mof/%{name}/*-peg.reg + +%preun +if [ "$1" = "0" ] ; then # last uninstall, not upgrade + peg-loadmof.sh -r -n root/PG_InterOp /usr/share/mof/%{name}/*-peg.reg + peg-loadmof.sh -r -n root/cimv2 /usr/share/mof/%{name}/OMC_Software.mof +fi + +%changelog -n omc-pysoftware-providers +* Fri Jun 29 2007 - bwh...@su... +- First build + Property changes on: pyprofiles/pysoftware/trunk/cmpi-pywbem-software-inventory.spec ___________________________________________________________________ Added: svn:mergeinfo + Deleted: pyprofiles/pysoftware/trunk/omc-pysoftware-providers.spec =================================================================== --- pyprofiles/pysoftware/trunk/omc-pysoftware-providers.spec 2008-09-16 18:08:06 UTC (rev 994) +++ pyprofiles/pysoftware/trunk/omc-pysoftware-providers.spec 2008-09-16 20:03:07 UTC (rev 995) @@ -1,69 +0,0 @@ -# -# spec file for package python-pywbem (Version 0.5) -# -# Copyright (c) 2007 SUSE LINUX Products GmbH, Nuernberg, Germany. -# This file and all modifications and additions to the pristine -# package are under the same license as the package itself. -# -# Please submit bugfixes or comments via http://bugs.opensuse.org/ -# - -# norootforbuild - -Name: omc-pysoftware-providers -BuildRequires: python-devel openwbem omc-pybase-providers -Version: 0.1.0 -Release: 2 -Group: System/Management -Summary: Instrumentation for DMTF Software Inventory Profile (DSP1023) -License: BSD -URL: http://omc-project.org/ -BuildArch: noarch -Source0: %{name}-%{version}.tar.gz -PreReq: /usr/bin/loadmof.sh -Requires: python-pywbem openwbem openwbem-python-providerifc -Requires: omc-pybase-providers rpm-python -BuildRoot: %{_tmppath}/%{name}-%{version}-build - -%description -Instrumentation for DMTF Software Inventory Profile (DSP1023) - - -Authors: --------- - Bart Whiteley - -%prep -%setup - -%build -python setup.py build - -%install -# http://lists.opensuse.org/opensuse-packaging/2007-02/msg00005.html -%{__rm} -rf $RPM_BUILD_ROOT -%{__mkdir} $RPM_BUILD_ROOT -python setup.py install --prefix=%{_prefix} --root $RPM_BUILD_ROOT \ - --install-lib=/usr/lib/pycim -O1 -%{__mkdir} -p $RPM_BUILD_ROOT/usr/share/mof/%{name} -install *.{mof,reg} $RPM_BUILD_ROOT/usr/share/mof/%{name}/ - -# END OF INSTALL - -%clean -%{__rm} -rf $RPM_BUILD_ROOT - -%files -%defattr(-,root,root,-) -/usr/lib/pycim/* -/usr/share/mof/%{name}/*.mof -/usr/share/mof/%{name}/*.reg - -%post -loadmof.sh -n root/cimv2 /usr/share/mof/%{name}/OMC_Software.mof -loadmof.sh -n Interop /usr/share/mof/%{name}/*.reg - -%changelog -n omc-pysoftware-providers -* Fri Jun 29 2007 - bwh...@su... -- First build - Modified: pyprofiles/pysoftware/trunk/setup.py =================================================================== --- pyprofiles/pysoftware/trunk/setup.py 2008-09-16 18:08:06 UTC (rev 994) +++ pyprofiles/pysoftware/trunk/setup.py 2008-09-16 20:03:07 UTC (rev 995) @@ -4,12 +4,18 @@ # For example: # python setup.py install --install-lib=/usr/lib/pycim -O1 +import os from distutils.core import setup -setup(name='omc-pysoftware-providers', +manifest = os.path.dirname(os.path.abspath(__file__)) + '/MANIFEST' +if os.path.exists(manifest): + print 'removing existing MANIFEST file' + os.unlink(manifest) + +setup(name='cmpi-pywbem-software-inventory', author='Bart Whiteley', author_email='bwh...@su...', - version='0.1.0', + version='0.2.0', description='Software Inventory Providers', url='http://omc-project.org/', py_modules=['OMC_RPMSoftwareIdentity', This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <np...@us...> - 2008-09-16 17:51:07
|
Revision: 992 http://omc.svn.sourceforge.net/omc/?rev=992&view=rev Author: npaxton Date: 2008-09-16 17:51:01 +0000 (Tue, 16 Sep 2008) Log Message: ----------- some additional checks, minor fixes Modified Paths: -------------- cmpi-bindings/trunk/swig/python/cmpi_pywbem_bindings.py Modified: cmpi-bindings/trunk/swig/python/cmpi_pywbem_bindings.py =================================================================== --- cmpi-bindings/trunk/swig/python/cmpi_pywbem_bindings.py 2008-09-16 17:49:16 UTC (rev 991) +++ cmpi-bindings/trunk/swig/python/cmpi_pywbem_bindings.py 2008-09-16 17:51:01 UTC (rev 992) @@ -50,6 +50,8 @@ return self def next(self): + if not self.enumeration: + return None if not self.enumeration.hasNext(): raise StopIteration val = getattr(self.enumeration.next().value, 'ref') @@ -58,9 +60,9 @@ return self.proxy.cmpi2pywbem_instname(val) def length(self): - if not self.enumeration or not self.enumeration.hasNext(): - return -1; - return self.enumeration.length(); + if not self.enumeration: + return 0 + return self.enumeration.toArray().size() class CIMInstanceIterator: def __init__(self, proxy, enumeration): @@ -71,6 +73,8 @@ return self def next(self): + if not self.enumeration: + return None if not self.enumeration.hasNext(): raise StopIteration val = getattr(self.enumeration.next().value, 'inst') @@ -79,9 +83,9 @@ return self.proxy.cmpi2pywbem_inst(val) def length(self): - if not self.enumeration or not self.enumeration.hasNext(): - return -1; - return self.enumeration.length(); + if not self.enumeration: + return 0 + return self.enumeration.toArray().size() class BrokerCIMOMHandle(object): def __init__(self, proxy, ctx): @@ -101,7 +105,10 @@ def GetInstance(self, path, props = None): cop = self.proxy.pywbem2cmpi_instname(path) - ci = self.broker.getInstance(self.ctx, cop, props) + # passing in props currently causes segfault + #ci = self.broker.getInstance(self.ctx, cop, props) + ci = self.broker.getInstance(self.ctx, cop, None) + print " --> ci=%s" %(ci) if ci is None: return None return self.proxy.cmpi2pywbem_inst(ci) @@ -145,7 +152,7 @@ return self.proxy.cmpi2pywbem_instname(ciname) def DeleteInstance(self, path): cop = self.proxy.pywbem2cmpi_instname(path) - return self.broker.createInstance(self.ctx, cop, inst) + return self.broker.deleteInstance(self.ctx, cop) ### Not sure whether this should be on BrokerCIMOMHandle or ### on ProviderEnvironment ### We may want to move it ? This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <np...@us...> - 2008-09-16 17:49:06
|
Revision: 991 http://omc.svn.sourceforge.net/omc/?rev=991&view=rev Author: npaxton Date: 2008-09-16 17:49:16 +0000 (Tue, 16 Sep 2008) Log Message: ----------- mods to get starttest() to an initial pass, several parts commented out Modified Paths: -------------- cmpi-bindings/trunk/test/python/UpcallAtomProvider.py Modified: cmpi-bindings/trunk/test/python/UpcallAtomProvider.py =================================================================== --- cmpi-bindings/trunk/test/python/UpcallAtomProvider.py 2008-09-16 17:07:01 UTC (rev 990) +++ cmpi-bindings/trunk/test/python/UpcallAtomProvider.py 2008-09-16 17:49:16 UTC (rev 991) @@ -160,8 +160,10 @@ try: iname = pywbem.CIMInstanceName(classname='Test_Atom', \ keybindings=(keybindings), namespace='root/cimv2') - inst = ch.GetInstance(ch.default_namespace, iname, PropertyList=propertylist) + inst = ch.GetInstance(iname, props=propertylist) + print ">>>>> _get_instance: inst: %s" %inst except pywbem.CIMError, arg: + print ">>>>> _get_instance: raise" raise return inst @@ -254,14 +256,12 @@ try: msg = '' cipath = ch.CreateInstance(cop, new_instance) - print "#*$&#)* Got cipath=%s" %cipath new_instance.path = cipath _inst_paths.append(cipath) except pywbem.CIMError, arg: raise - print "returning new_instance path: %s instance: %s msg: %s" %(cop, new_instance, msg) return new_instance, msg ################################################################################ @@ -274,8 +274,6 @@ if not rval: continue try: - print "rval.path=%s rval=%s" %(rval.path, rval) - print "Trying to GetInstance(%s)" %(rval.path) ci = ch.GetInstance(rval.path) insts.append(ci) except pywbem.CIMError,arg: @@ -288,7 +286,7 @@ global _inst_paths for ipath in _inst_paths: try: - ch.DeleteInstance(ch.default_namespace, ipath) + ch.DeleteInstance(ipath) except pywbem.CIMError,arg: raise '#### Delete Instance failed' _inst_paths = [] @@ -350,7 +348,6 @@ def cim_method_starttest(self, env, object_name): - print "Got into provider invokeMethod" """Implements UpcallAtom.starttest() Kickoff the method provider test @@ -393,16 +390,17 @@ # 'DeleteInstance', 'DeleteQualifier', 'EnumerateClassNames', 'EnumerateClasses', # 'EnumerateInstanceNames', 'EnumerateInstances', 'EnumerateQualifiers', 'GetClass', # 'GetInstance', 'GetQualifier', 'InvokeMethod', 'ModifyClass', 'ModifyInstance', # 'ReferenceNames', 'References', 'SetQualifier', 'export_indication', # 'set_default_namespace'] #test_1_upcalls + print "####### test_1_upcalls #######" #Written to test associators of Linux_UnixProcess class # try: logger.log_debug("Getting AssociatorNames") ci_list = ch.EnumerateInstanceNames(ch.default_namespace, "Linux_UnixProcess") - if ci_list and ci_list.length > 0: + if ci_list and ci_list.length() > 0: ci_entry=ci_list.next() assoc_names = ch.AssociatorNames(ci_entry,\ assocClass="Linux_OSProcess") #AssocNames - if assoc_names and assoc_names.length > 0: + if assoc_names and assoc_names.length() > 0: #Linux_UnixProcess has an association through Linux_OSProcess #1. Linux_OperatingSystem for name in assoc_names: @@ -412,7 +410,7 @@ assoc = ch.AssociatorNames(ci_entry, \ assocClass="Linux_ProcessExecutable")#Assoc - if assoc and assoc_names.length > 0: + if assoc and assoc_names.length() > 0: #Linux_UnixProcess has an association through Linux_ProcessExecutable #1. Linux_LinuxDataFile for inst in assoc: @@ -587,7 +585,7 @@ for statdef in stat_list: if statdef['DefinitionID'] == "machine_type": ref_list = ch.ReferenceNames(statdef) - if ref_list and ref_list.length > 0: + if ref_list and ref_list.length() > 0: for ref in ref_list: cn = ref.classname if cn == "Novell_DCAMCurrentValueForStatDef" or\ @@ -631,7 +629,7 @@ ################################################################################ # #test_2_create_instance - print "test_2_create_instance" + print "####### test_2_create_instance #######" ''' try: insts = _setup(ch, time, env) @@ -648,7 +646,7 @@ #test_3_enum_instances #Test enumeration of instances and then compare them with the local # storage dictionary - print "test_3_enum_instances" + print "####### test_3_enum_instances #######" insts = _setup(ch, time, env) paths = [] ta_list = [] @@ -662,27 +660,17 @@ raise 'EnumerateInstanceNames failed: %s' % str(arg) if paths.length() != ta_list.length(): - raise 'EnumerateInstances (%s) returned different number of '\ - 'results than EnumerateInstanceNames (%s)' %(ta_list.length(), paths.length()) - - print "1" - + raise 'EnumerateInstances (%d) returned different number of '\ + 'results than EnumerateInstanceNames (%d)' %(ta_list.length(), paths.length()) + for ci in insts:#Loop through instances - print "2: ci.path=%s" %ci.path - print "ta_list.length()=%d" %ta_list.length() - print "ta_list: %s" %ta_list - for rci in ta_list: - print "3" - print '==== rci.path:',str(rci.path) - print '==== ci.path:',str(ci.path) + for rci in ch.EnumerateInstances(ch.default_namespace, 'Test_Atom'): if rci.path != ci.path: continue else: - print "4" rval = _compare_values(rci, time, logger) - print "5" if rval: - break + break #break out of for rci loop else: continue else: @@ -693,7 +681,7 @@ ################################################################################ #test_4_enum_instance_names #Test enumeration of names - print "test_4_enum_instance_names" + print "####### test_4_enum_instance_names ########" insts = _setup(ch, time, env) try: @@ -711,7 +699,7 @@ 'results than EnumerateInstanceNames' for ci in insts: - for path in ta_list: + for path in ch.EnumerateInstanceNames(ch.default_namespace, 'Test_Atom'): #path.host = None if path == ci.path: break @@ -724,6 +712,7 @@ ################################################################################ #test_5_get_instance_with_property_list + print "####### test_5_get_instance_with_property_list ########" rinst= _create_test_instance(ch, 'Carbon', 6, time) if not rinst: @@ -734,17 +723,24 @@ keybindings = {'Name': 'Carbon'} try: inst = _get_instance(ch, keybindings, propertylist) + print ">>>>> 1" except pywbem.CIMError, arg: raise 'Could not _get_instance on %s'%str(rinst) + print ">>>>> 2" if inst: + print ">>>>> 3" for prop in inst.properties.keys(): + print ">>>>> 4" if prop not in propertylist: - raise "Property Not Found in PropertyList: " % prop + print ">>>>> 5" + #raise "Property Not Found in PropertyList: " % prop _cleanup(ch) ################################################################################ #test_6_modify_instance + print "####### test_6_modify_instance ########" + ''' #Create an instance of "Boron" and then modify it to Helium # Once modified, get_instance returns it and then check the values of it rinst = _create_test_instance(ch, 'Boron', 5, time) @@ -806,16 +802,18 @@ else: raise "ModifyInstance Failed!!" _cleanup(ch) + ''' ################################################################################ #test_7_delete + print "######## test_7_delete #######" #Testing the delete upcall for TestAtom insts = _setup(ch, time, env) del_instances = _get_instance_names(ch) for inst in del_instances: try: - ch.DeleteInstance(ch.default_namespace, inst) + ch.DeleteInstance(inst) except pywbem.CIMError, arg: raise 'DeleteInstance Failed: %s' % str(arg) else: This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ba...@us...> - 2008-09-16 17:06:51
|
Revision: 990 http://omc.svn.sourceforge.net/omc/?rev=990&view=rev Author: bartw Date: 2008-09-16 17:07:01 +0000 (Tue, 16 Sep 2008) Log Message: ----------- renamed a couple of files. Added Paths: ----------- pyprofiles/simpleIdentity/trunk/OMC_UserAccntMgmtHostedService.py pyprofiles/simpleIdentity/trunk/OMC_UserAccountManagementService.py Removed Paths: ------------- pyprofiles/simpleIdentity/trunk/OMC_UserAccntMgmtHostedServiceProvider.py pyprofiles/simpleIdentity/trunk/OMC_UserAccountManagementServiceProvider.py Copied: pyprofiles/simpleIdentity/trunk/OMC_UserAccntMgmtHostedService.py (from rev 987, pyprofiles/simpleIdentity/trunk/OMC_UserAccntMgmtHostedServiceProvider.py) =================================================================== --- pyprofiles/simpleIdentity/trunk/OMC_UserAccntMgmtHostedService.py (rev 0) +++ pyprofiles/simpleIdentity/trunk/OMC_UserAccntMgmtHostedService.py 2008-09-16 17:07:01 UTC (rev 990) @@ -0,0 +1,336 @@ +#******************************************************************************* +# Copyright (C) 2007 Novell, Inc. All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are met: +# +# - Redistributions of source code must retain the above copyright notice, +# this list of conditions and the following disclaimer. +# +# - Redistributions in binary form must reproduce the above copyright notice, +# this list of conditions and the following disclaimer in the documentation +# and/or other materials provided with the distribution. +# +# - Neither the name of Novell, Inc. nor the names of its +# contributors may be used to endorse or promote products derived from this +# software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS'' +# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +# ARE DISCLAIMED. IN NO EVENT SHALL Novell, Inc. OR THE CONTRIBUTORS +# BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +# POSSIBILITY OF SUCH DAMAGE. +# +#*****************************************************************************/ +"""Python Provider for OMC_UserAccntMgmtHostedService + +Instruments the CIM class OMC_UserAccntMgmtHostedService + +""" + +import pywbem +from socket import getfqdn + +class OMC_UserAccntMgmtHostedServiceProvider(pywbem.CIMProvider): + """Instrument the CIM class OMC_UserAccntMgmtHostedService + + CIM_HostedService is an association between a Service and the System on + which the functionality is located. The cardinality of this + association is one-to-many. A System can host many Services. Services + are weak with respect to their hosting System. Heuristic: A Service is + hosted on the System where the LogicalDevices or SoftwareFeatures that + implement the Service are located. The model does not represent + Services hosted across multiple systems. The model is as an + ApplicationSystem that acts as an aggregation point for Services that + are each located on a single host. + + """ + + def __init__ (self, env): + logger = env.get_logger() + logger.log_debug('Initializing provider %s from %s' \ + % (self.__class__.__name__, __file__)) + # If you will be filtering instances yourself according to + # property_list, role, result_role, and result_class_name + # parameters, set self.filter_results to False + # self.filter_results = False + + def get_instance(self, env, model, cim_class): + """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. + cim_class -- The pywbem.CIMClass + + 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__) + return model + + def enum_instances(self, env, model, cim_class, 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. + cim_class -- The pywbem.CIMClass + 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__) + + ch = env.get_cimom_handle() + + try: + Computer_System = pywbem.CIMInstanceName(classname='OMC_UnitaryComputerSystem' , + namespace=model.path.namespace, + keybindings={'CreationClassName':'OMC_UnitaryComputerSystem', + 'Name':getfqdn()}) + except: + return + + Usrmgmt_Srv = [] + try: + ch.EnumerateInstances('OMC_UserAccountManagementService', model.path.namespace, LocalOnly=False, IncludeQualifiers=False, \ + Handler=lambda inst:inst['SystemName'] == Computer_System['Name'] and Usrmgmt_Srv.append(inst) ) + except: + return + + for Instance in Usrmgmt_Srv: + if 'antecedent' in model: + model['antecedent'] = Computer_System + if 'dependent' in model: + model['dependent'] = Instance.path + yield model + + + def set_instance(self, env, instance, previous_instance, cim_class): + """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. + previous_instance -- The previous pywbem.CIMInstance if modifying + an existing instance. None if creating a new instance. + cim_class -- The pywbem.CIMClass + + 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 previous_instance is None, indicating that the operation + was CreateInstance) + CIM_ERR_NOT_FOUND (the CIM Instance does not exist -- only valid + if previous_instance is not None, 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, assoc_class, + 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. + assoc_class -- The pywbem.CIMClass. + 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] assoc_class | | + +--------------+ object_name.classname REF role | | + | object_name | ~~~~~~~~~~~~~~~~~~~~~~~~~ | | + (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() + # This is a common pattern. YMMV + if (not role or role.lower() == 'dependent') and \ + pywbem.is_subclass(ch, object_name.namespace, + sub=object_name.classname, + super='OMC_UserAccountManagementService'): + if result_role and result_role.lower() != 'antecedent': + return + if result_class_name and result_class_name.lower() != 'OMC_UnitaryComputerSystem': + return + + try: + Computer_System = pywbem.CIMInstanceName(classname='OMC_UnitaryComputerSystem' , + namespace=model.path.namespace, + keybindings={'CreationClassName':'OMC_UnitaryComputerSystem', + 'Name':getfqdn()}) + objlist= [] + ch.EnumerateInstances('OMC_UserAccountManagementService', model.path.namespace, LocalOnly=False, IncludeQualifiers=False, + Handler=lambda inst:inst['SystemName'] == Computer_System['Name'] and \ + objlist.append(inst)) + for element in objlist : + model['antecedent'] = object_name + model['dependent'] = Computer_System + yield model + except: + return + elif (not role or role.lower() == 'antecedent') and \ + pywbem.is_subclass(ch, object_name.namespace, + sub=object_name.classname, + super='OMC_UnitaryComputerSystem'): + #model['dependent'] = object_name + if result_role and result_role.lower() != 'dependent': + return + if result_class_name and result_class_name.lower() != 'OMC_UserAccountMangementService': + return + objlist = [] + try: + Comp_Sys = pywbem.CIMInstanceName(classname='OMC_UnitaryComputerSystem' , + namespace=model.path.namespace, + keybindings={'CreationClassName':'OMC_UnitaryComputerSystem', + 'Name':getfqdn()}) + except: + return + + try: + ch.EnumerateInstances('OMC_UserAccountManagementService', model.path.namespace, LocalOnly=False, IncludeQualifiers=False, + Handler=lambda inst:inst['SystemName'] == Comp_Sys['Name'] and \ + objlist.append(inst)) + except: + return + + for element in objlist: + model['antecedent'] = Comp_Sys + model['dependent'] = object_name + yield model + + +## end of class OMC_UserAccntMgmtHostedServiceProvider + +def get_providers(env): + omc_useraccntmgmthostedservice_prov = OMC_UserAccntMgmtHostedServiceProvider(env) + return {'OMC_UserAccntMgmtHostedService': omc_useraccntmgmthostedservice_prov} + Deleted: pyprofiles/simpleIdentity/trunk/OMC_UserAccntMgmtHostedServiceProvider.py =================================================================== --- pyprofiles/simpleIdentity/trunk/OMC_UserAccntMgmtHostedServiceProvider.py 2008-09-16 16:58:29 UTC (rev 989) +++ pyprofiles/simpleIdentity/trunk/OMC_UserAccntMgmtHostedServiceProvider.py 2008-09-16 17:07:01 UTC (rev 990) @@ -1,336 +0,0 @@ -#******************************************************************************* -# Copyright (C) 2007 Novell, Inc. All rights reserved. -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are met: -# -# - Redistributions of source code must retain the above copyright notice, -# this list of conditions and the following disclaimer. -# -# - Redistributions in binary form must reproduce the above copyright notice, -# this list of conditions and the following disclaimer in the documentation -# and/or other materials provided with the distribution. -# -# - Neither the name of Novell, Inc. nor the names of its -# contributors may be used to endorse or promote products derived from this -# software without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS'' -# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE -# ARE DISCLAIMED. IN NO EVENT SHALL Novell, Inc. OR THE CONTRIBUTORS -# BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR -# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF -# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS -# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN -# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) -# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE -# POSSIBILITY OF SUCH DAMAGE. -# -#*****************************************************************************/ -"""Python Provider for OMC_UserAccntMgmtHostedService - -Instruments the CIM class OMC_UserAccntMgmtHostedService - -""" - -import pywbem -from socket import getfqdn - -class OMC_UserAccntMgmtHostedServiceProvider(pywbem.CIMProvider): - """Instrument the CIM class OMC_UserAccntMgmtHostedService - - CIM_HostedService is an association between a Service and the System on - which the functionality is located. The cardinality of this - association is one-to-many. A System can host many Services. Services - are weak with respect to their hosting System. Heuristic: A Service is - hosted on the System where the LogicalDevices or SoftwareFeatures that - implement the Service are located. The model does not represent - Services hosted across multiple systems. The model is as an - ApplicationSystem that acts as an aggregation point for Services that - are each located on a single host. - - """ - - def __init__ (self, env): - logger = env.get_logger() - logger.log_debug('Initializing provider %s from %s' \ - % (self.__class__.__name__, __file__)) - # If you will be filtering instances yourself according to - # property_list, role, result_role, and result_class_name - # parameters, set self.filter_results to False - # self.filter_results = False - - def get_instance(self, env, model, cim_class): - """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. - cim_class -- The pywbem.CIMClass - - 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__) - return model - - def enum_instances(self, env, model, cim_class, 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. - cim_class -- The pywbem.CIMClass - 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__) - - ch = env.get_cimom_handle() - - try: - Computer_System = pywbem.CIMInstanceName(classname='OMC_UnitaryComputerSystem' , - namespace=model.path.namespace, - keybindings={'CreationClassName':'OMC_UnitaryComputerSystem', - 'Name':getfqdn()}) - except: - return - - Usrmgmt_Srv = [] - try: - ch.EnumerateInstances('OMC_UserAccountManagementService', model.path.namespace, LocalOnly=False, IncludeQualifiers=False, \ - Handler=lambda inst:inst['SystemName'] == Computer_System['Name'] and Usrmgmt_Srv.append(inst) ) - except: - return - - for Instance in Usrmgmt_Srv: - if 'antecedent' in model: - model['antecedent'] = Computer_System - if 'dependent' in model: - model['dependent'] = Instance.path - yield model - - - def set_instance(self, env, instance, previous_instance, cim_class): - """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. - previous_instance -- The previous pywbem.CIMInstance if modifying - an existing instance. None if creating a new instance. - cim_class -- The pywbem.CIMClass - - 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 previous_instance is None, indicating that the operation - was CreateInstance) - CIM_ERR_NOT_FOUND (the CIM Instance does not exist -- only valid - if previous_instance is not None, 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, assoc_class, - 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. - assoc_class -- The pywbem.CIMClass. - 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] assoc_class | | - +--------------+ object_name.classname REF role | | - | object_name | ~~~~~~~~~~~~~~~~~~~~~~~~~ | | - (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() - # This is a common pattern. YMMV - if (not role or role.lower() == 'dependent') and \ - pywbem.is_subclass(ch, object_name.namespace, - sub=object_name.classname, - super='OMC_UserAccountManagementService'): - if result_role and result_role.lower() != 'antecedent': - return - if result_class_name and result_class_name.lower() != 'OMC_UnitaryComputerSystem': - return - - try: - Computer_System = pywbem.CIMInstanceName(classname='OMC_UnitaryComputerSystem' , - namespace=model.path.namespace, - keybindings={'CreationClassName':'OMC_UnitaryComputerSystem', - 'Name':getfqdn()}) - objlist= [] - ch.EnumerateInstances('OMC_UserAccountManagementService', model.path.namespace, LocalOnly=False, IncludeQualifiers=False, - Handler=lambda inst:inst['SystemName'] == Computer_System['Name'] and \ - objlist.append(inst)) - for element in objlist : - model['antecedent'] = object_name - model['dependent'] = Computer_System - yield model - except: - return - elif (not role or role.lower() == 'antecedent') and \ - pywbem.is_subclass(ch, object_name.namespace, - sub=object_name.classname, - super='OMC_UnitaryComputerSystem'): - #model['dependent'] = object_name - if result_role and result_role.lower() != 'dependent': - return - if result_class_name and result_class_name.lower() != 'OMC_UserAccountMangementService': - return - objlist = [] - try: - Comp_Sys = pywbem.CIMInstanceName(classname='OMC_UnitaryComputerSystem' , - namespace=model.path.namespace, - keybindings={'CreationClassName':'OMC_UnitaryComputerSystem', - 'Name':getfqdn()}) - except: - return - - try: - ch.EnumerateInstances('OMC_UserAccountManagementService', model.path.namespace, LocalOnly=False, IncludeQualifiers=False, - Handler=lambda inst:inst['SystemName'] == Comp_Sys['Name'] and \ - objlist.append(inst)) - except: - return - - for element in objlist: - model['antecedent'] = Comp_Sys - model['dependent'] = object_name - yield model - - -## end of class OMC_UserAccntMgmtHostedServiceProvider - -def get_providers(env): - omc_useraccntmgmthostedservice_prov = OMC_UserAccntMgmtHostedServiceProvider(env) - return {'OMC_UserAccntMgmtHostedService': omc_useraccntmgmthostedservice_prov} - Copied: pyprofiles/simpleIdentity/trunk/OMC_UserAccountManagementService.py (from rev 987, pyprofiles/simpleIdentity/trunk/OMC_UserAccountManagementServiceProvider.py) =================================================================== --- pyprofiles/simpleIdentity/trunk/OMC_UserAccountManagementService.py (rev 0) +++ pyprofiles/simpleIdentity/trunk/OMC_UserAccountManagementService.py 2008-09-16 17:07:01 UTC (rev 990) @@ -0,0 +1,637 @@ +#******************************************************************************* +# Copyright (C) 2007 Novell, Inc. All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are met: +# +# - Redistributions of source code must retain the above copyright notice, +# this list of conditions and the following disclaimer. +# +# - Redistributions in binary form must reproduce the above copyright notice, +# this list of conditions and the following disclaimer in the documentation +# and/or other materials provided with the distribution. +# +# - Neither the name of Novell, Inc. nor the names of its +# contributors may be used to endorse or promote products derived from this +# software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS'' +# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +# ARE DISCLAIMED. IN NO EVENT SHALL Novell, Inc. OR THE CONTRIBUTORS +# BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +# POSSIBILITY OF SUCH DAMAGE. +# +#*****************************************************************************/ +"""Python Provider for OMC_UserAccountManagementService + +Instruments the CIM class OMC_UserAccountManagementService + +""" + +import pywbem +import pwd +import os +import string +from socket import getfqdn + +FILE='/etc/pam.d/common-account' + +class OMC_UserAccountManagementServiceProvider(pywbem.CIMProvider): + """Instrument the CIM class OMC_UserAccountManagementService + + Novell implementation of CIM_AccountManagementServicecreates, manages, + and if necessary destroys Accounts on behalf of other SecuritySerices. + + """ + + def __init__ (self, env): + logger = env.get_logger() + logger.log_debug('Initializing provider %s from %s' \ + % (self.__class__.__name__, __file__)) + # If you will be filtering instances yourself according to + # property_list, role, result_role, and result_class_name + # parameters, set self.filter_results to False + # self.filter_results = False + + def get_instance(self, env, model, cim_class): + """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. + cim_class -- The pywbem.CIMClass + + 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__) + + #model['Caption'] = # TODO (type = unicode) + #model['Description'] = # TODO (type = unicode) + + srv_name = model['Name'] + if ( "unix" in srv_name ) : + model['ElementName'] = "/etc/passwd Authentication Service" + elif ( "ldap" in srv_name ): + model['ElementName'] = "LDAP Authentication Service" + elif ( "radius" in name ) : + model['ElementName'] ="RADIUS Authentication Service" + else: + model['ElementName'] = model['Name'] + ' Authentication Service' + + #model['EnabledDefault'] = # TODO (type = pywbem.Uint16 self.Values.EnabledDefault) (default=2L) + model['EnabledState'] = [self.Values.EnabledState.Not_Applicable] + #model['HealthState'] = # TODO (type = pywbem.Uint16 self.Values.HealthState) + #model['InstallDate'] = # TODO (type = pywbem.CIMDateTime) + #model['OperationalStatus'] = # TODO (type = [pywbem.Uint16,] self.Values.OperationalStatus) + #model['OtherEnabledState'] = # TODO (type = unicode) + #model['PrimaryOwnerContact'] = # TODO (type = unicode) + #model['PrimaryOwnerName'] = # TODO (type = unicode) + #model['RequestedState'] = # TODO (type = pywbem.Uint16 self.Values.RequestedState) (default=12L) + #model['Started'] = # TODO (type = bool) + #model['StartMode'] = # TODO (type = unicode self.Values.StartMode) + #model['Status'] = # TODO (type = unicode self.Values.Status) + #model['StatusDescriptions'] = # TODO (type = [unicode,]) + #model['TimeOfLastStateChange'] = # TODO (type = pywbem.CIMDateTime) + return model + + def enum_instances(self, env, model, cim_class, 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. + cim_class -- The pywbem.CIMClass + 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__) + + #while False: # TODO more instances? + # TODO fetch system resource + # Key properties + # model['Name'] = 'hai '# TODO (type = unicode) + model['SystemCreationClassName'] = 'OMC_UnitaryComputerSystem' + model['SystemName'] = getfqdn() + model['CreationClassName'] = 'OMC_UserAccountManagementService' + + auth_file=open(FILE) + for line in auth_file: + line = line.rstrip('\n') + for word in line.split(): + if word[0] == '#' : + break + elif word == 'account': + found=0 + for word in line.split(): + lgth_word=len(word) + if word[0:4]== "pam_": + model['Name']= word[4:lgth_word-3] + found=1 + if keys_only: + yield model + else: + try: + yield self.get_instance(env, model, cim_class) + except pywbem.CIMError, (num, msg): + if num not in (pywbem.CIM_ERR_NOT_FOUND,pywbem.CIM_ERR_ACCESS_DENIED): + raise + if found != 1: + logger.log_debug('Strange line in file::!!%s ' % FILE ) + raise pywbem.CIMError(pywbem.CIM_ERR_FAILED) + break + else : + logger.log_debug('Strange word line in file::!!%s ' % FILE ) + raise pywbem.CIMError(pywbem.CIM_ERR_FAILED) + break + """ + if keys_only: + yield model + else: + try: + yield self.get_instance(env, model, cim_class) + except pywbem.CIMError, (num, msg): + if num not in (pywbem.CIM_ERR_NOT_FOUND,pywbem.CIM_ERR_ACCESS_DENIED): + raise + """ + auth_file.close() + + def set_instance(self, env, instance, previous_instance, cim_class): + """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. + previous_instance -- The previous pywbem.CIMInstance if modifying + an existing instance. None if creating a new instance. + cim_class -- The pywbem.CIMClass + + 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 previous_instance is None, indicating that the operation + was CreateInstance) + CIM_ERR_NOT_FOUND (the CIM Instance does not exist -- only valid + if previous_instance is not None, 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 cim_method_requeststatechange(self, env, object_name, method, + param_requestedstate, + param_timeoutperiod): + """Implements OMC_UserAccountManagementService.RequestStateChange() + + Requests that the state of the element be changed to the value + specified in the RequestedState parameter. When the requested + state change takes place, the EnabledState and RequestedState of + the element will be the same. Invoking the RequestStateChange + method multiple times could result in earlier requests being + overwritten or lost. If 0 is returned, then the task completed + successfully and the use of ConcreteJob was not required. If 4096 + (0x1000) is returned, then the task will take some time to + complete, ConcreteJob will be created, and its reference returned + in the output parameter Job. Any other return code indicates an + error condition. + + Keyword arguments: + env -- Provider Environment (pycimmb.ProviderEnvironment) + object_name -- A pywbem.CIMInstanceName or pywbem.CIMCLassName + specifying the object on which the method RequestStateChange() + should be invoked. + method -- A pywbem.CIMMethod representing the method meta-data + param_requestedstate -- The input parameter RequestedState (type pywbem.Uint16 self.Values.RequestStateChange.RequestedState) + The state requested for the element. This information will be + placed into the RequestedState property of the instance if the + return code of the RequestStateChange method is 0 ('Completed + with No Error'), 3 ('Timeout'), or 4096 (0x1000) ('Job + Started'). Refer to the description of the EnabledState and + RequestedState properties for the detailed explanations of the + RequestedState values. + + param_timeoutperiod -- The input parameter TimeoutPeriod (type pywbem.CIMDateTime) + A timeout period that specifies the maximum amount of time that + the client expects the transition to the new state to take. + The interval format must be used to specify the TimeoutPeriod. + A value of 0 or a null parameter indicates that the client has + no time requirements for the transition. If this property + does not contain 0 or null and the implementation does not + support this parameter, a return code of 'Use Of Timeout + Parameter Not Supported' must be returned. + + + Returns a two-tuple containing the return value (type pywbem.Uint32 self.Values.RequestStateChange) + and a dictionary with the out-parameters + + Output parameters: + Job -- (type REF (pywbem.CIMInstanceName(classname='CIM_ConcreteJob', ...)) + Reference to the job (can be null if the task is completed). + + + Possible Errors: + CIM_ERR_ACCESS_DENIED + CIM_ERR_INVALID_PARAMETER (including missing, duplicate, + unrecognized or otherwise incorrect parameters) + CIM_ERR_NOT_FOUND (the target CIM Class or instance does not + exist in the specified namespace) + CIM_ERR_METHOD_NOT_AVAILABLE (the CIM Server is unable to honor + the invocation request) + CIM_ERR_FAILED (some other unspecified error occurred) + + """ + + logger = env.get_logger() + logger.log_debug('Entering %s.cim_method_requeststatechange()' \ + % self.__class__.__name__) + + # TODO do something + raise pywbem.CIMError(pywbem.CIM_ERR_METHOD_NOT_AVAILABLE) # Remove to implemented + out_params = {} + #out_params['job'] = # TODO (type REF (pywbem.CIMInstanceName(classname='CIM_ConcreteJob', ...)) + rval = None # TODO (type pywbem.Uint32 self.Values.RequestStateChange) + return (rval, out_params) + + def cim_method_startservice(self, env, object_name, method): + """Implements OMC_UserAccountManagementService.StartService() + + The StartService method places the Service in the started state. + Note that the function of this method overlaps with the + RequestedState property. RequestedState was added to the model to + maintain a record (such as a persisted value) of the last state + request. Invoking the StartService method should set the + RequestedState property appropriately. The method returns an + integer value of 0 if the Service was successfully started, 1 if + the request is not supported, and any other number to indicate an + error. In a subclass, the set of possible return codes could be + specified using a ValueMap qualifier on the method. The strings to + which the ValueMap contents are translated can also be specified + in the subclass as a Values array qualifier. Note: The semantics + of this method overlap with the RequestStateChange method that is + inherited from EnabledLogicalElement. This method is maintained + because it has been widely implemented, and its simple "start" + semantics are convenient to use. + + Keyword arguments: + env -- Provider Environment (pycimmb.ProviderEnvironment) + object_name -- A pywbem.CIMInstanceName or pywbem.CIMCLassName + specifying the object on which the method StartService() + should be invoked. + method -- A pywbem.CIMMethod representing the method meta-data + + Returns a two-tuple containing the return value (type pywbem.Uint32) + and a dictionary with the out-parameters + + Output parameters: none + + Possible Errors: + CIM_ERR_ACCESS_DENIED + CIM_ERR_INVALID_PARAMETER (including missing, duplicate, + unrecognized or otherwise incorrect parameters) + CIM_ERR_NOT_FOUND (the target CIM Class or instance does not + exist in the specified namespace) + CIM_ERR_METHOD_NOT_AVAILABLE (the CIM Server is unable to honor + the invocation request) + CIM_ERR_FAILED (some other unspecified error occurred) + + """ + + logger = env.get_logger() + logger.log_debug('Entering %s.cim_method_startservice()' \ + % self.__class__.__name__) + + # TODO do something + raise pywbem.CIMError(pywbem.CIM_ERR_METHOD_NOT_AVAILABLE) # Remove to implemented + out_params = {} + rval = None # TODO (type pywbem.Uint32) + return (rval, out_params) + + def cim_method_stopservice(self, env, object_name, method): + """Implements OMC_UserAccountManagementService.StopService() + + The StopService method places the Service in the stopped state. + Note that the function of this method overlaps with the + RequestedState property. RequestedState was added to the model to + maintain a record (such as a persisted value) of the last state + request. Invoking the StopService method should set the + RequestedState property appropriately. The method returns an + integer value of 0 if the Service was successfully stopped, 1 if + the request is not supported, and any other number to indicate an + error. In a subclass, the set of possible return codes could be + specified using a ValueMap qualifier on the method. The strings to + which the ValueMap contents are translated can also be specified + in the subclass as a Values array qualifier. Note: The semantics + of this method overlap with the RequestStateChange method that is + inherited from EnabledLogicalElement. This method is maintained + because it has been widely implemented, and its simple "stop" + semantics are convenient to use. + + Keyword arguments: + env -- Provider Environment (pycimmb.ProviderEnvironment) + object_name -- A pywbem.CIMInstanceName or pywbem.CIMCLassName + specifying the object on which the method StopService() + should be invoked. + method -- A pywbem.CIMMethod representing the method meta-data + + Returns a two-tuple containing the return value (type pywbem.Uint32) + and a dictionary with the out-parameters + + Output parameters: none + + Possible Errors: + CIM_ERR_ACCESS_DENIED + CIM_ERR_INVALID_PARAMETER (including missing, duplicate, + unrecognized or otherwise incorrect parameters) + CIM_ERR_NOT_FOUND (the target CIM Class or instance does not + exist in the specified namespace) + CIM_ERR_METHOD_NOT_AVAILABLE (the CIM Server is unable to honor + the invocation request) + CIM_ERR_FAILED (some other unspecified error occurred) + + """ + + logger = env.get_logger() + logger.log_debug('Entering %s.cim_method_stopservice()' \ + % self.__class__.__name__) + + # TODO do something + raise pywbem.CIMError(pywbem.CIM_ERR_METHOD_NOT_AVAILABLE) # Remove to implemented + out_params = {} + rval = None # TODO (type pywbem.Uint32) + return (rval, out_params) + + def cim_method_createaccount(self, env, object_name, method, + param_accounttemplate, + param_system): + """Implements OMC_UserAccountManagementService.CreateAccount() + + CreateAccount creates an Account on the specified ComputerSystem. + Upon successful completion of the method, there shall be a newly + created instance of CIM_Account associated through the + CIM_AccountOnSystem association with the instance of + ComputerSystem identified by the System parameter such that each + property of the CIM_Account instance has the value of the + corresponding property of the template instance specified by the + AccountTemplate parameter and the CIM_Account instance is + associated with this instance of CIM_AccountManagementService + through the CIM_ServiceAffectsElement association. + + Keyword arguments: + env -- Provider Environment (pycimmb.ProviderEnvironment) + object_name -- A pywbem.CIMInstanceName or pywbem.CIMCLassName + specifying the object on which the method CreateAccount() + should be invoked. + method -- A pywbem.CIMMethod representing the method meta-data + param_accounttemplate -- The input parameter AccountTemplate (type pywbem.CIMInstance(classname='CIM_Account', ...)) (Required) + AccountTemplate is a template for the desired Account to be + created. + + param_system -- The input parameter System (type REF (pywbem.CIMInstanceName(classname='CIM_ComputerSystem', ...)) (Required) + The scoping ComputerSystem in which to create the Account. + + + Returns a two-tuple containing the return value (type pywbem.Uint32 self.Values.CreateAccount) + and a dictionary with the out-parameters + + Output parameters: + Account -- (type REF (pywbem.CIMInstanceName(classname='CIM_Account', ...)) + Reference to the instance of CIM_Account created when the + method returns a value of 0. + + + Possible Errors: + CIM_ERR_ACCESS_DENIED + CIM_ERR_INVALID_PARAMETER (including missing, duplicate, + unrecognized or otherwise incorrect parameters) + CIM_ERR_NOT_FOUND (the target CIM Class or instance does not + exist in the specified namespace) + CIM_ERR_METHOD_NOT_AVAILABLE (the CIM Server is unable to honor + the invocation request) + CIM_ERR_FAILED (some other unspecified error occurred) + + """ + + logger = env.get_logger() + logger.log_debug('Entering %s.cim_method_createaccount()' \ + % self.__class__.__name__) + + # TODO do something + raise pywbem.CIMError(pywbem.CIM_ERR_METHOD_NOT_AVAILABLE) # Remove to implemented + out_params = {} + #out_params['account'] = # TODO (type REF (pywbem.CIMInstanceName(classname='CIM_Account', ...)) + rval = None # TODO (type pywbem.Uint32 self.Values.CreateAccount) + return (rval, out_params) + + class Values(object): + class Status(object): + OK = 'OK' + Error = 'Error' + Degraded = 'Degraded' + Unknown = 'Unknown' + Pred_Fail = 'Pred Fail' + Starting = 'Starting' + Stopping = 'Stopping' + Service = 'Service' + Stressed = 'Stressed' + NonRecover = 'NonRecover' + No_Contact = 'No Contact' + Lost_Comm = 'Lost Comm' + Stopped = 'Stopped' + + class RequestedState(object): + Enabled = pywbem.Uint16(2) + Disabled = pywbem.Uint16(3) + Shut_Down = pywbem.Uint16(4) + No_Change = pywbem.Uint16(5) + Offline = pywbem.Uint16(6) + Test = pywbem.Uint16(7) + Deferred = pywbem.Uint16(8) + Quiesce = pywbem.Uint16(9) + Reboot = pywbem.Uint16(10) + Reset = pywbem.Uint16(11) + Not_Applicable = pywbem.Uint16(12) + # DMTF_Reserved = .. + # 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 = .. + + class CreateAccount(object): + Completed_with_No_Error = pywbem.Uint32(0) + Not_Supported = pywbem.Uint32(1) + Failed = pywbem.Uint32(2) + # Method_Reserved = .. + # Vendor_Specific = 32768..65535 + + 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(... [truncated message content] |