[ClusterLabs Developers] Perl Modules for resource agents (was: Resource Agent language discussion)

Jehan-Guillaume de Rorthais jgdr at dalibo.com
Wed Nov 25 19:13:36 EST 2015

Le Thu, 20 Aug 2015 18:21:01 +0200,
Jehan-Guillaume de Rorthais <jgdr at dalibo.com> a écrit :

> On Thu, 20 Aug 2015 15:05:24 +1000
> Andrew Beekhof <andrew at beekhof.net> wrote:

> > > What I was discussing here was:
> > > 
> > >  * if not using bash, is there any trap we should avoid that are already
> > >    addressed in the ocf-shellfuncs library?
> > 
> > No, you just might have to re-implement some things.
> > Particularly logging.
> Ok, that was my conclusion so far. I'll have a look at the logging funcs then.
> > >  * is there a chance a perl version of such library would be accepted
> > > upstream?
> > 
> > Depends if you’re volunteering to maintain it too :)
> I do. I'll have to do it on my own for my RA anyway. 

Months are flying! Already 3 of them since my last answer...

I spent some time to port "ocf-shellfuncs", "ocf-returncodes" and
"ocf-directories" shell scripts as perl modules called "OCF_Functions.pm",
"OCF_ReturnCodes.pm" and "OCF_Directories.pm". They are currently
hiding in our pgsql-resource-agent repository under the "multistate/lib"
folder. See :


They are used from the "pgsqlms" resource agent available in the
"multistate/script" folder. They are supposed to leave in
"$OCF_ROOT//lib/heartbeat/". The pgsqlms agent has been tested again and again
in various failure situations under CentOS 6 and CentOS 7. Modules seems to
behave correctly.

Before considering pushing them out in a dedicated repository (or upstream?)
where maintaining them would be easier, I would like to hear some feedback about

First, OCF_Functions does not implement all the shell functions available in
ocf-shellfuncs. As a first step, I focused on a simple module supporting the
popular functions we actually needed for our own agent. Let me know if I forgot
a function that MUST be in this first version.

Second, "OCF_Directories.pm" is actually generated from "OCF_Directories.pm.PL".
Because I can not rely on the upstream autogen/configure to detect the
distribution specific destination folders, I wrote a wrapper in
"multistate/Build.PL" around the "ocf-directories" shell script to export these
variables in a temp file. Then when "building" the module,
OCF_Directories.pm.PL read this temp file to produce the final
distribution-dependent "OCF_Directories.pm". I don't like stuffing too much
shell in perl scripts, but it's really like the autogen/configure process at
the end of the day and this piece of code is only in the build process.

Cleaner ways would be to:

  * generate OCF_Directories.pm by the upstream ./configure which already have
    all the logic
  * re-implement the logic to find the appropriate destination folders in
    "Build.PL". I am currently not able to follow this solution as reverse
    engineering the autogen/configure process seems pretty difficult and time

The libs are currently auto-installed with our pgsqlms agent following the quite
standard way to install perl modules and scripts:

  perl Build.PL
  perl Build
  perl Build install

Any feedback, advice, patch etc would be appreciated!

PS: files are in attachment for ease of review.

Jehan-Guillaume de Rorthais
-------------- next part --------------
A non-text attachment was scrubbed...
Name: Build.PL
Type: application/x-perl
Size: 3443 bytes
Desc: not available
URL: <http://lists.clusterlabs.org/pipermail/developers/attachments/20151126/a4176a26/attachment-0008.pl>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: OCF_Directories.pm.PL
Type: application/x-perl
Size: 3743 bytes
Desc: not available
URL: <http://lists.clusterlabs.org/pipermail/developers/attachments/20151126/a4176a26/attachment-0009.pl>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: OCF_Functions.pm
Type: application/x-perl
Size: 12492 bytes
Desc: not available
URL: <http://lists.clusterlabs.org/pipermail/developers/attachments/20151126/a4176a26/attachment-0010.pl>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: OCF_ReturnCodes.pm
Type: application/x-perl
Size: 1859 bytes
Desc: not available
URL: <http://lists.clusterlabs.org/pipermail/developers/attachments/20151126/a4176a26/attachment-0011.pl>

More information about the Developers mailing list