Search code examples
jboss7.xpuppetjboss-eap-6puppet-enterpriseaugeas

How to use setm in puppet


I would like to change a one property name ( "modcluster.proxylist" ) with setm Command in Puppet. My following code is not working. Any help is much appreciated.

    augeas { "jboss_domain_config":
            incl    =>      "/opt/domain.xml",
            lens    =>      "Xml.lns",
            context =>      "/files/opt/domain.xml",
            onlyif  =>      "match /files/opt/domain.xml/domain/server-groups/*/system-properties/*/#attribute/name modcluster.proxylist"
            changes =>      "setm /files/opt/domain.xml/domain/server-groups server-group[.]/system-properties/property[.]/#attribute/value kumaran",
    }

Following is my Source XML which i would like to change.

<server-group name="ServiceGroupOne" profile="full-ha">
    <system-properties>
            <property name="jboss.default.multicast.address" value="232.0.2.20" boot-time="true"/>
            <property name="modcluster.proxylist" value="192.168.79.77:7777" boot-time="true"/>
            <property name="modcluster.lbgroup" value="SearchGroupOne" boot-time="true"/>
    </system-properties>
</server-group>
<server-group name="ServiceGroupTwo" profile="full-ha">
    <system-properties>
            <property name="jboss.default.multicast.address" value="232.0.2.20" boot-time="true"/>
            <property name="modcluster.lbgroup" value="SearchGroupTwo" boot-time="true"/>
            <property name="modcluster.proxylist" value="192.168.79.77:7777" boot-time="true"/>
    </system-properties>
</server-group>
<server-group name="ServiceGroupThree" profile="full-ha">
    <system-properties>
            <property name="modcluster.lbgroup" value="CommonSearchGroup" boot-time="true"/>
            <property name="modcluster.proxylist" value="192.168.79.77:7777" boot-time="true"/>
            <property name="jboss.default.multicast.address" value="232.0.2.20" boot-time="true"/>
    </system-properties>
</server-group>

Solution

  • There's quite a few problems in there. Let's deal with them one by one:

    • it seems the domain.xml code you provide is wrong, as there's no domain and server-groups nodes as your Puppet code suggests. I take it there's two more levels around the code you provided:

      <domain>
        <server-groups>
          <!-- the rest of the file -->
        <server-groups>
      <domain>
      
    • there's no need to set context when using incl and lens, it's automatic

    • you misunderstood the way setm works: the first parameter is the nodeset on which Augeas will loop, the second one is the subnode to set and the third one the value
    • the change you want to do with setm is inherently idempotent, there's really no need to use onlyif here.

    Here's the result:

    augeas { "jboss_domain_config":
      incl    =>      "/tmp/domain.xml",
      lens    =>      "Xml.lns",
      changes =>      "setm domain/server-groups/server-group system-properties/property[#attribute/name='modcluster.proxylist']/#attribute/value kumaran",
     }