[Pacemaker] Problems with <rule>

Matthew Turnbull matthew.turnbull at messagescan.net
Fri Feb 20 17:02:44 EST 2009


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 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.




More information about the Pacemaker mailing list