1

我正在尝试使用 Puppet 中的 augeas 资源类型在 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

从 puppet 使用命令 defnode 看起来需要 3 个强制参数,但从 augtool 使用时只需要 2 个(和 1 个可选)。(见我的原帖

如何在 Puppet 中克服 augeas 实施中的这种限制?

4

1 回答 1

5

那里有几个问题。

首先,虽然在defnode中接受一个可选的第三个参数(一个值)augtool,但这个参数在 Ruby/Puppet 中是强制性的。但是,您可以将其设置为空字符串。

其次,该$user变量由 Puppet 解析,因为您使用的是双引号,因此 Augeas 没有收到它(它是空的)。您必须使用单引号或转义美元符号。一般来说,建议在 Puppet 中使用单引号,除非您需要扩展变量。

第三,最好使用inclandlens而不是root. 您也将从contextPuppet 中的自动功能中受益:

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"',
  ],
}
于 2014-01-27T16:12:41.653 回答