Как использовать Setm с некоторым условием

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

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

Ограничение: в приведенном ниже примере у Two Group нет имени свойства. В этих группах изменения не должны применяться.

<server-groups>
    <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"/>
        </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>
    <server-group name="ServiceGroupFour" profile="full-ha">
    </server-group>
</server-groups>

Код Augeas:

Следующий код редактирует все группы серверов. Он также вставляет вторую и четвертую группы серверов, в которых у нас нет свойства ( modcluster.proxylist ).

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

person ArunRaj    schedule 15.02.2016    source источник
comment
Кажется, в вашем примере отсутствует уровень server-groups, иначе путь в вашем примере Puppet не имеет смысла.   -  person raphink    schedule 15.02.2016
comment
@ℝaphink : Да, я пропустил это. Сейчас я обновил пример. Пожалуйста, просмотрите его.   -  person ArunRaj    schedule 15.02.2016
comment
Я пытаюсь понять, что ты хочешь сделать. Вы хотите убедиться, что эта запись прокси-листа существует для каждой группы серверов, или вы хотите исключить некоторые группы?   -  person raphink    schedule 15.02.2016
comment
@ℝaphink: Если свойство modcluster.proxylist существует, я хочу изменить его значения в группе серверов. Если какая-либо группа серверов не содержит свойства, ее следует оставить как есть.   -  person ArunRaj    schedule 15.02.2016
comment
У вас есть require в коде Puppet. Вы пытаетесь управлять этим файлом дважды?   -  person raphink    schedule 15.02.2016


Ответы (1)


Подводя итог вашей потребности, вы хотите:

  • Выберите modcluster.proxylist свойства, которые уже существуют
  • Замените их значения на ${proxylist}

Это должно сделать:

augeas { "jboss_domain_config":
    incl    =>  "${dc_home}/domain/configuration/domain.xml",
    lens    =>  "Xml.lns",
    changes =>  "setm domain/server-groups/server-group/system-properties/property/#attribute[name='modcluster.proxylist'] value ${proxylist}",
}
person raphink    schedule 15.02.2016
comment
@Raphink: Не мог бы я немного объяснить код. - person ArunRaj; 15.02.2016
comment
@ArunRaj это означает, что Augeas не смог проанализировать ваш XML-файл. Пожалуйста, дайте полное сообщение об ошибке. - person raphink; 16.02.2016
comment
@ArunRaj Вы одновременно принимаете ответы и отрицаете их? - person raphink; 16.02.2016
comment
@Raphink: я очень сожалею об этом. Это была моя ошибка. Я проголосовал за него, не попробовав должным образом решение. После того, как я проанализировал и опробовал его, он работает хорошо, как я и ожидал. Теперь я не мог проголосовать за него. Не могли бы вы отредактировать ответ, чтобы я проголосовал за него. Пожалуйста, простите мою ошибку. - person ArunRaj; 16.02.2016