Cimbiote CIM Providers In Python

About

Cimbiote allows writing and running CIM providers written in Python. It is intended to make CIM development more accessible to developers.

A good analogy is: Cimbiote is to CIM as mod_python is to Apache.

Architecture

Cimbiote works by installing itself (libCimbiote.so) as a OpenPegasus CMPI provider. Cimbiote embeds a python interpreter and carries some Python code with it that allows it to load plugins that are written in Python.

Plugins are distributed as seperate RPM's. Incoming CIM requests are routed through Cimbiote to the appropriate plugins and back into Cimbiote, allowing CIM plugins to be written without any C or C++ code, and more importantly, without vast knowledge of CIM.

Cimbiote plugins register MOF files like any other CIM provider, and are fully accessible over standard CIM tools like wbemxec and wbemcli.

Installation

NOTE: Cimbiote is licensed under the LGPL. The example plugin is licensed as BSD to enable it to be used as reference material, even for proprietary apps.

Getting the RPMs

Cimbiote

To install Cimbiote and the Example Plugin:

Source The source code is also available in Mercurial:

FAQ

What's Currently Supported?
Cimbiote supports:

Cimbiote doesn't support (yet):

How much do I need to know?
Cimbiote allows writing CIM providers with a minimum about of CIM knowledge. You should be able to run wbemcli and understand the purpose of basic methods, but you won't need to know how to write Pegasus C++ or CMPI C providers. No C++ or C knowledge is required. When writing your own plugins to redistribute, some knowledge of make and RPM packaging would be very helpful. The example RPM's code should be rather self explanatory -- reading Cimbiote (the engine's) source is purely optional.

How do I test a provider?
The example plugin comes with Unit tests (both pure Python and ones that use wbemexec) that do a pretty good job of building unit tests around a provider. In addition, you can send commands to a CIM provider with wbemcli, wbemexec, or pywbem, or rubywbem.

Did you just say PyWBEM?
Yes, I did. Usage with pywbem would allow writing a end-to-end CIM solution entirely in Python. See sourceforge. Cimbiote is not related to pywbem, and it doesn't require it, but we thought you should know about it.

Did you just say RubyWBEM?
Yes, I did. RubyWBEM is another Red Hat project from Scott Seago. See rubyforge.

Is this ready for production use?
We'll be the first to admit Cimbiote is a bit "researchy". It has one small memory leak, presumably due to CIM_Request objects not being freed in the Python layers. We welcome feedback (and patches), so please send them along.

Didn't someone do this already for Perl?
Yes. The sblim project wrote a Perl provider infrastructure a while back, though as far as we're aware, it's not actively maintained. Our Python provider supports many more features -- including modifications, creations, deletions, and methods. Plus, we feel its' a lot easier to use. Going the python route allows us to also bind to a wide array of OS-level Python modules already written for the Linux platform.

What OS's are supported?
Cimbiote was tested on Fedora Core-5 and later and contains code that is specific to the RHEL/Fedora packaging of Pegasus. The core code (not the RPM's) should work on more Linux distributions, though we use the RPM to do things like register the Pegasus provider.

Contact

Cimbiote was written by Mihai Ibanescu and Michael DeHaan.

Send comments, questions, bug-reports, patches, and suggestions to the et-mgmt-tools list. You can send mail even if you aren't a list member.


Open Standards & Dynamic Languages

CIM doesn't have a lot of adoption in open source because writing a provider is rather complicated. It doesn't have to be.

We've Done The Hard Work Already

Cimbiote merges a OpenPegasus CMPI provider with an embedded Python interpreter and a self-registering plugin framework. Discovering cold fusion might have been easier.