Как использовать setm в puppet

Я хотел бы изменить одно имя свойства ("modcluster.proxylist") с помощью команды setm в Puppet. Мой следующий код не работает. Буду признателен за любую оказанную помощь.

    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",
    }

Ниже приведен мой исходный XML, который я хотел бы изменить.

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

person ArunRaj    schedule 12.11.2015    source источник


Ответы (1)


Там довольно много проблем. Давайте разберемся с ними по одному:

  • кажется, что код domain.xml, который вы предоставляете, неверен, так как нет узлов domain и server-groups, как предполагает ваш код Puppet. Я так понимаю, что код, который вы предоставили, имеет еще два уровня:

    <domain>
      <server-groups>
        <!-- the rest of the file -->
      <server-groups>
    <domain>
    
  • нет необходимости устанавливать context при использовании incl и lens, это происходит автоматически

  • вы неправильно поняли, как работает setm: первый параметр - это набор узлов, на котором Augeas будет зацикливаться, второй - это подузел для установки, а третий - значение
  • изменение, которое вы хотите сделать с помощью setm, по своей сути идемпотентно, здесь действительно нет необходимости использовать onlyif.

Вот результат:

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",
 }
person raphink    schedule 12.11.2015