2014-01-27 75 views
1

我嘗試添加或使用的木偶augeas資源類型更新XML配置文件中的用戶,這裏的清單:爲什麼Augeas Puppet資源類型需要3個defnode參數?

augeas { "nexus_user_newadmin": 
    lens => "Xml.lns", 
    incl => "security.xml", 
    root => "/usr/local/nexus/conf", 
    changes => [ 
     "defnode user /files/security.xml/security/users/user[id/#text='newadmin']", 
     "set $user/id/#text 'newadmin'", 
     "set $user/firstName/#text 'first name'", 
     "set $user/lastName/#text 'last name'", 
     "set $user/password/#text 'passhere'", 
     "set $user/status/#text 'active'", 
     "set $user/email/#text '[email protected]'", 
    ], 
    } 

的xml文件看起來像:

<?xml version="1.0"?> 
<security> 
      <users> 
      ... 
      <user> 
       <id>deployment</id> 
       <firstName>Deployment</firstName> 
       <lastName>User</lastName> 
       <password>somepasshere</password> 
       <status>active</status> 
       <email>[email protected]</email> 
      </user> 
      </users> 
</security> 

我得到當我運行清單以下錯誤:

Main/Augeas[nexus_user_newadmin]: Could not evaluate: missing string argument 3 for defnode 

它看起來像從木偶用於當所述命令需要defnode 3個強制參數,但只有2(和1運從augtool使用時。 (see my original post

我該如何克服augeas在Puppet中的實施限制?

回答

5

這裏有幾個問題。

首先,雖然defnode發生在augtool一個可選第三個參數(的值),這種說法是拼音/木偶強制性的。但是,您可以將其設置爲空字符串。

其次,$user變量由Puppet分析,因爲您使用雙引號,所以Augeas不會收到它(它是空的)。您必須使用單引號或轉義美元符號。一般來說,除非需要擴展變量,否則建議在Puppet中使用單引號。

第三,最好使用incllens而不是root。您將受益於木偶自動context,太:

augeas { 'nexus_user_newadmin': 
    lens => 'Xml.lns', 
    incl => '/usr/local/nexus/conf/security.xml', 
    changes => [ 
    'defnode user security/users/user[id/#text="newadmin"] ""', 
    'set $user/id/#text "newadmin"', 
    'set $user/firstName/#text "first name"', 
    'set $user/lastName/#text "last name"', 
    'set $user/password/#text "passhere"', 
    'set $user/status/#text "active"', 
    'set $user/email/#text "[email protected]"', 
    ], 
} 
+0

看起來像它創建一個新用戶每節的貨單運行時間。如何避免這一點?我的意思是,更新已經存在的用戶或添加一個新的用戶,如果它不存在。 – PapelPincel

+0

它不應該。至少,它不適合我。你確定你是否正確複製了代碼(包括,特別是引號)? –

+0

我的不好!它完美的作品!非常感謝你 :) – PapelPincel

相關問題