【问题标题】:How do I create new xml nodes in a given position using augeas in puppet?如何使用 puppet 中的 augeas 在给定位置创建新的 xml 节点?
【发布时间】:2016-02-15 23:28:55
【问题描述】:

我正在尝试使用 puppet 编辑 weblogic config.xml 文件以完成 SSL 配置部分。

在起始 weblogic config.xml 文件下方:

<?xml version="1.0" encoding="UTF-8"?>
<domain ...
...
<server>
  <name>AdminServer</name>
  <ssl>
    <name>AdminServer</name>
    <enabled>true</enabled>
    <listen-port>7336</listen-port>
  </ssl>

低于我需要得到的:

<?xml version="1.0" encoding="UTF-8"?>
<domain ...
  ...
  <server>
    <name>AdminServer</name>
    <ssl>
      <name>AdminServer</name>
      <enabled>true</enabled>
      <hostname-verifier xsi:nil="true"></hostname-verifier>
      <hostname-verification-ignored>false</hostname-verification-ignored>
      <client-certificate-enforced>false</client-certificate-enforced>
      <listen-port>7336</listen-port>
      <two-way-ssl-enabled>true</two-way-ssl-enabled>
      <server-private-key-alias>...alias...</server-private-key-alias>
      <server-private-key-pass-phrase-encrypted>...key-pass-phrase...        </server-private-key-pass-phrase-encrypted>
    </ssl>

在我的傀儡代码下面:

augeas { "ssl_config_${instance}":
  lens    => "Xml.lns",
  require => File["${config_instance}"],
  incl    => "${config_instance}",
  changes => [
    "set domain/server/ssl/hostname-verifier/#attribute/xsi:nil true",
    "set domain/server/ssl/hostname-verification-ignored/#text false",
    "set domain/server/ssl/client-certificate-enforced/#text false",
    "set domain/server/ssl/two-way-ssl-enabled/#text true",
    "set domain/server/ssl/server-private-key-alias/#text    ${server_private_key_alias}",
    "set domain/server/ssl/server-private-key-pass-phrase-encrypted/#text ${server_private_key_pass_phrase}",
   ], 
}

低于我得到的:

...
  <ssl>
    <name>AdminServer</name>
    <enabled>true</enabled>
    <listen-port>7336</listen-port>
  <hostname-verifier xsi:nil="true"></hostname-verifier>
  <hostname-verification-ignored>false</hostname-verification-ignored>
  <client-certificate-enforced>false</client-certificate-enforced>
  <two-way-ssl-enabled>true</two-way-ssl-enabled>
  <server-private-key-alias>default</server-private-key-alias>
  <server-private-key-pass-phrase-encrypted>...key-pass-phrase...
 </server-private-key-pass-phrase-encrypted>
</ssl>

如您所见,节点是在最后一个节点之后添加的,但这样我们会使架构无效。

有没有办法指定新节点应该添加到哪个位置?

提前感谢您的任何反馈 问候 费普

【问题讨论】:

  • 对 augeas 完全不熟悉,但几乎可以使用任何通用语言(Java、C#、Perl、PHP、Python、R、VB)来处理此任务。建议您使用什么。希望你不是一个用锤子做所有工作的木匠!
  • @ferp 所以你的问题是应该正确放置listen-port,对吧?如果是这样,那就意味着你需要使用insert而不是set,但是幂等性会更难实现。
  • @Parfait 所有这些语言都可以编辑 XML,但使用 Puppet 进行幂等编辑则是另一回事。

标签: xml puppet augeas


【解决方案1】:

您必须使用ins ... before/after ...,结合onlyif,这不是很实用,因为通常每个要设置的值至少需要两个资源(一个带有set 命令,另一个是ins)。有这样的例子in the documentation

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-11-18
    • 1970-01-01
    • 2015-10-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-15
    相关资源
    最近更新 更多