Hi, On Tue, Oct 02, 2012 at 03:41:32PM +0300, Vladislav Bogdanov wrote: > Hi Dejan, > > 28.09.2012 14:07, Dejan Muhamedagic wrote: > ... > > > > OK. Silly me. Sorry for the non-vi users ;-) Thanks for the > > patch! > > > > Dejan > > > > One more patch to fix lrmadmin disfunction with 1.1.8.
But this fixes support for RH fence-agents, if I'm not wrong. > It is a little bit intrusive, but I'm definitely not a python coder :) That's no problem. > You can just take it as a reference. Definitely useful. Thanks! > diff -urNp a/modules/ra.py b/modules/ra.py > --- a/modules/ra.py 2012-09-13 12:47:48.000000000 +0000 > +++ b/modules/ra.py 2012-09-27 08:01:19.965097194 +0000 > @@ -76,7 +70,10 @@ class RaOS(object): > l = stdout2list("%s/resource.d/%s/%s meta-data" % \ > (os.environ["OCF_ROOT"],ra_provider,ra_type)) > elif ra_class == "stonith": > - l = stdout2list("stonith -m -t %s" % ra_type) > + if ra_type.startswith("fence_") and > os.path.exists("/usr/sbin/%s" % ra_type): > + l = stdout2list("/usr/sbin/%s -o metadata" % ra_type) > + else: > + l = stdout2list("stonith -m -t %s" % ra_type) > return l > def providers(self, ra_type,ra_class = "ocf"): > 'List of providers for a class:type.' > @@ -97,8 +103,13 @@ class RaOS(object): > l = os_types_list("/etc/init.d/*") > elif ra_class == "stonith": > l = stdout2list("stonith -L") > + l.extend(os_types_list("/usr/sbin/fence_*")) > l = list(set(l)) > l.sort() > + if ra_class == "stonith": > + for ra in ("fence_ack_manual", "fence_pcmk", "fence_legacy"): > + if l.count(ra): > + l.remove(ra) > return l > > def can_use_lrmadmin(): > @@ -114,10 +124,8 @@ def can_use_lrmadmin(): > def ra_if(): > if vars.ra_if: > return vars.ra_if > - if can_use_lrmadmin(): > - vars.ra_if = RaLrmd() There's actually a point in using lrmadmin/lrmd because lrmd used to provide the meta-data for lsb class. > - if not vars.ra_if or not vars.ra_if.good: > - vars.ra_if = RaOS() > + > + vars.ra_if = RaOS() > return vars.ra_if > > def ra_classes(): > @@ -458,11 +466,16 @@ class RAInfo(object): > if p in self.skip_op_attr: > continue > n_ops[n_op][p] = v > + > for req_op in self.required_ops: > if req_op not in n_ops: > - n_ops[req_op] = {} > + if not (self.ra_class == "stonith" and op in ("start", > "stop")): > + n_ops[req_op] = {} > + > intervals = {} > for op in n_ops: > + if self.ra_class == "stonith" and op in ("start", "stop"): > + continue Cool! Many thanks! Cheers, Dejan > if op not in self.actions(): > common_warn("%s: action %s not advertised in meta-data, it > may not be supported by the RA" % (id,op)) > rc |= 1 > --- > > Best, > Vladislav > > _______________________________________________ > Pacemaker mailing list: Pacemaker@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://bugs.clusterlabs.org _______________________________________________ Pacemaker mailing list: Pacemaker@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://bugs.clusterlabs.org