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

コマンド defnode を puppet から使用する場合は 3 つの必須引数が必要ですが、augtool から使用する場合は 2 つ (およびオプションで 1 つ) しか必要ないようです。(私の元の投稿を参照してください

Puppet の augeas 実装でこの制限を克服するにはどうすればよいですか?

4

1 に答える 1

5

そこにはいくつかの問題があります。

まず、 ではオプションの3 番目の引数 (値)をdefnode取りますが、この引数は Ruby/Puppet では必須です。ただし、空の文字列に設定できます。augtool

次に、$user変数は二重引用符を使用しているため Puppet によって解析されるため、Augeas はそれを受け取りません (空です)。一重引用符を使用するか、ドル記号をエスケープする必要があります。一般に、変数を展開する必要がない限り、Puppet では一重引用符を使用することをお勧めします。

第三に、よりもinclandを使用する方が良いでしょう。Puppet での自動化も役立ちます。lensrootcontext

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 に答える