[Pacemaker] Newcomer's question - API?

Andrew Beekhof andrew at beekhof.net
Wed Nov 2 05:46:09 EDT 2011

On Wed, Nov 2, 2011 at 2:33 PM, Tim Serong <tserong at suse.com> wrote:
> On 11/02/2011 08:34 AM, Florian Haas wrote:
>> On 2011-11-01 21:30, Andrew Beekhof wrote:
>>> On Wed, Nov 2, 2011 at 7:04 AM, Florian Haas<florian at hastexo.com>  wrote:
>>>> On 2011-11-01 17:52, Tim Ward wrote:
>>>>>> You can try tooking at LCMC as that is a Java-based GUI that
>>>>>> should at least get you going.
>>>>> I did find some Java code but we can't use it because it's GPL, and I
>>>>> didn't want to study it in case I accidentally copied some of it in
>>>>> recreating it.
>>>> Well if you can't use anything that's under GPL, I presume anything
>>>> derived from cib.h is off limits to you anyway, as _that_ is under GPL.
>>> LGPL iirc
>>> From include/crm/cib.h:
>> /*
>>  * Copyright (C) 2004 Andrew Beekhof<andrew at beekhof.net>
>>  *
>>  * This program is free software; you can redistribute it and/or
>>  * modify it under the terms of the GNU General Public
>>  * License as published by the Free Software Foundation; either
>>  * version 2 of the License, or (at your option) any later version.
>> Doesn't say much about LGPL afaics.
> <ianal>I vaguely recall reading the FSF considered headers generally exempt
> from GPL provisions, provided they're "boring", i.e. just structs, function
> definitions etc.  If they're a whole lotta inline code, things are a bit
> different</ianal>.
> Anyway.  Roughly speaking, if we *did* have other language bindings for
> libcib/libpengine, the story would be something like this (Andrew can
> correct me if I'm wrong):
> libcib would let you manipulate the CIB programatically, with much the same
> ability you have when running cibadmin, i.e. you're just manipulating chunks
> of XML.  Unless I'm not paying attention, there's no e.g. "create resource"
> API; your program would have to construct the correct XML resource
> definition then give it to libcib to inject into the cluster configuration.
>  Likewise, to stop and start a resource, you'll be writing code to set the
> target-role meta attribute of that resource.  So you may as well just invoke
> cibadmin, crm_resource, crm_attribute directly.  I think it's safe to assume
> those interfaces are stable.  At a higher level, "crm configure ..." should
> also be considered pretty stable; we know people use it in scripts so we try
> not to break it (and BTW, I use all this stuff in Hawk[1]).
> libpengine is more interesting.  That would give you reliable information
> about resource status.  The alternative (given no other language bindings)

I've no problem providing additional language bindings if the interest is there.
I recently added python using SWIG so Java should be pretty easy.

> is generally either:
>  - various invocations of crm_mon and crm_resource (maybe lots of
>    invocations, depending on what information you want to extract),
>    which can suck on large clusters, or,
>  - one invocation of "cibadmin -Q" to get the CIB status section,
>    then process this yourself to determine resource status, using the
>    Dragon Page[2] as a guide.  If you do a good jobs of this and/or
>    you care about op history (not just current status), you will
>    end up reimplementing parts of the determine_online_status() and
>    unpack_rsc_op() functions from Pacemaker's lib/pengine/unpack.c in
>    $other_language_of_your_choice.
> Regards,
> Tim
> [1] http://clusterlabs.org/wiki/Hawk
> [2]
> http://www.clusterlabs.org/doc/en-US/Pacemaker/1.1/html/Pacemaker_Explained/ch-status.html
> --
> Tim Serong
> Senior Clustering Engineer
> tserong at suse.com
> _______________________________________________
> Pacemaker mailing list: Pacemaker at oss.clusterlabs.org
> http://oss.clusterlabs.org/mailman/listinfo/pacemaker
> Project Home: http://www.clusterlabs.org
> Getting started: http://www.clusterlabs.org/doc/Cluster_from_Scratch.pdf
> Bugs:
> http://developerbugs.linux-foundation.org/enter_bug.cgi?product=Pacemaker

More information about the Pacemaker mailing list