2016-02-15 54 views
0

我在嘗試使用puppet編輯weblogic config.xml文件來完成SSL配置部分。如何使用puppet中的augeas在給定的位置創建新的xml節點?

下面的啓動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> 

正如您所看到的,節點是在最後一個節點之後添加的,但是這樣我們會使模式無效。

有什麼方法可以指定新節點應該添加到哪個位置?

預先感謝任何反饋 問候 ferp

+0

對augeas並不熟悉,但這個任務可以用任何通用語言(Java,C#,Perl,PHP,Python,R,VB)來處理。建議你使用什麼。希望你不是一個用錘子做所有工作的木匠! – Parfait

+0

@ferp所以你的問題是'listen-port'應該被正確放置,對吧?如果是這樣,這意味着你需要使用'insert'而不是'set',但是冪等難以實現。 –

+0

@Parfait所有這些語言都可以編輯XML,但使用Puppet進行編輯是另一回事。 –

回答

0

你將不得不使用ins ... before/after ...,與onlyif,這是不是很實用的,因爲一般來說,你會按照您想要的值至少需要兩個資源結合設置(一個使用set命令,另一個使用ins)。有像這樣的例子in the documentation

相關問題