[Pacemaker] Problems with <rule>

Andrew Beekhof beekhof at gmail.com
Mon Feb 23 05:57:45 EST 2009


On Fri, Feb 20, 2009 at 23:02, Matthew Turnbull
<matthew.turnbull at messagescan.net> wrote:
> Hi,
>
> I'm having problems using the <rule> element in a Pacemaker CIB.  First, this is the "resources" section I'm trying to use (line numbers inserted for clarity):
>
>
> 01: <resources>
> 02:   <clone id="mips-node-clone">
> 03:     <primitive class="ocf" id="mips-node" provider="heartbeat" type="pingd">
> 04:       <instance_attributes id="mips-node-vh10-instance_attributes" score="10">
> 05:         <rule id="mips-node-vh10">
> 06:           <expression id="mips-node-vh10-expr" attribute="#uname" operation="eq" value="vh10"/>
> 07:         </rule>
> 08:         <nvpair id="mips-node-instance_attributes-multiplier" name="multiplier" value="3000"/>
> 09:       </instance_attributes>
> 10:       <instance_attributes id="mips-node-instance_attributes">
> 11:         <nvpair id="mips-node-instance_attributes-name" name="name" value="mips_remain"/>
> 12:         <nvpair id="mips-node-instance_attributes-multiplier" name="multiplier" value="1000"/>
> 13:         <nvpair id="mips-node-instance_attributes-host_list" name="host_list" value="127.0.0.1"/>
> 14:       </instance_attributes>
> 15:     </primitive>
> 16:   </clone>
> 17: </resources>
>
>
> When I try to import this I get an error (Update does not conform to the configured schema/DTD).  Doing it in shadow mode gives a little more detail:
>
>
> ...
>  19     <resources>
>  20       <clone id="mips-node-clone">
>  21         <primitive class="ocf" id="mips-node" provider="heartbeat" type="pingd">
>  22           <instance_attributes id="mips-node-vh10-instance_attributes" score="10">
>  23             <rule id="mips-node-vh10">
>  24               <expression id="mips-node-vh10-expr" attribute="#uname" operation="eq" value="vh10"/>
>  25             </rule>
>  26             <nvpair id="mips-node-instance_attributes-multiplier" name="multiplier" value="3000"/>
>  27           </instance_attributes>
>  28           <instance_attributes id="mips-node-instance_attributes">
>  29             <nvpair id="mips-node-instance_attributes-name" name="name" value="mips_remain"/>
>  30             <nvpair id="mips-node-instance_attributes-multiplier" name="multiplier" value="1000"/>
>  31             <nvpair id="mips-node-instance_attributes-host_list" name="host_list" value="127.0.0.1"/>
>  32           </instance_attributes>
>  33         </primitive>
>  34       </clone>
>  35     </resources>
> ...
> Relax-NG validity error : Extra element rule in interleave
> /var/run/shadow.1gTYhU:22: element instance_attributes: Relax-NG validity error : Element instance_attributes failed to validate content
> Relax-NG validity error : Extra element instance_attributes in interleave
> /var/run/shadow.1gTYhU:22: element instance_attributes: Relax-NG validity error : Element primitive failed to validate content
> /var/run/shadow.1gTYhU:20: element clone: Relax-NG validity error : Invalid sequence in interleave
> /var/run/shadow.1gTYhU:1: element cib: Relax-NG validity error : Element cib failed to validate content
> Call failed: Update does not conform to the configured schema/DTD
>
>
> If I remove lines 5, 6 and 7 from my XML file (the rule) - but still leave in place the separate instance_attributes with a score value - it loads and validates fine.
>
> I've looked at the offending lines and tried so many different things, but so long as any form of <rule> is there, this fails to load.  I've read through the DTD

Look in rule.rng
After "id" it has:
      <choice>
	<externalRef href="score.rng"/>
	<attribute name="score-attribute"><text/></attribute>
      </choice>

basically its looking for a value for either score or score-attribute.


> and by the look of it I've got my tags right - but still it doesn't work!
>
> Can anyone see anything I've done wrong here please?
>
> For background, what I'm trying to do is use a pingd clone set pointing at a different attribute (mips_remain) to maintain a "MIPS Remaining" counter for each node.  This snippet above is to create the intial values - default of 1000, but overridden to 3000 on node vh10.
>
> Once this is working, I will run additional single-instance "pingd" resources in my real resource groups, with the multipliers set to a negative value indicating a "MIPS Consumed" value of the resource group.
>
> I hope that will then leave my "mips_remain" attribute as the initial value less the sum of all resources running on a node.  I'll use this score to determine where to start new resources.
>
> And yes, I know there's a nasty flip-flop effect in there once it's up and running - my resource stickiness will ensure this approach is only used for placement when starting resources, and no failback will ever occur!
>
> Many thanks,
>
> Matt.
>
> _______________________________________________
> Pacemaker mailing list
> Pacemaker at oss.clusterlabs.org
> http://oss.clusterlabs.org/mailman/listinfo/pacemaker
>




More information about the Pacemaker mailing list