我正在尝试使用augeas资源类型在puppet中添加或更新XML配置文件中的用户,此处清单:
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 'test@domain.com'",
],
}
XML文件看起来像:
<?xml version="1.0"?>
<security>
<users>
...
<user>
<id>deployment</id>
<firstName>Deployment</firstName>
<lastName>User</lastName>
<password>somepasshere</password>
<status>active</status>
<email>changeme1@yourcompany.com</email>
</user>
</users>
</security>
我运行清单时会出现错误:
Main/Augeas[nexus_user_newadmin]: Could not evaluate: missing string argument 3 for defnode
从木偶使用中使用时,命令辩护人需要3个强制性参数,但是在Augtool中使用时只有2个(和1个可选)。(请参阅我的原始帖子)
我如何克服木偶中的Augeas实施中的这一限制?
那里有几个问题。
首先,而 defnode
在 augtool
中采用可选第三个参数(一个值),但此参数在ruby/puppet中是必须的。但是,您可以将其设置为一个空字符串。
第二,$user
变量是由木偶解析的,因为您使用了双引号,因此Augeas不会收到它(它是空的)。您必须使用单引号或逃脱美元符号。通常,除非需要扩展变量,否则建议在木偶中使用单个引号。
第三,最好使用incl
和lens
而不是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 "test@domain.com"',
],
}