解決策 1:
Puppet 仮想リソースを使用するのが正しい方法ですが、ユーザー定義を変更できず、その間に回避策の修正が必要な場合は、次の方法は恐ろしくハックですが、機能します:
exec { 'foo somegroup membership':
unless => '/bin/grep -q "somegroup\\S*foo" /etc/group',
command => '/sbin/usermod -aG somegroup foo',
require => User['foo'],
}
基本的に、somegroup にユーザー foo がまだ含まれているかどうかを確認するだけです...含まれていない場合は、通常の usermod コマンドを使用して、foo が属する既存のグループに追加します。
解決策 2:
ユーザーを仮想リソースとして宣言すると、'realize' またはコレクション構文 ( User <| ... |>) を使用できます。以下に例を示します:
@user { 'foo':
groups => ['somegroup'],
membership => minimum,
}
次に、コレクション構文でその仮想ユーザーを認識します:
User <| title == foo |>
また、plusignment を使用して、その仮想リソースのパラメーターに追加することもできます。
User <| title == foo |> { groups +> "svn" }
解決策 3:
ありがとう - 確かに醜いハックですが、それは仕事を成し遂げます。 「nrpe」を「nagios」グループに追加するパス付きの例 (上記のコメントを組み合わせたもの) を次に示します。ここのユーザーは puppet ではなく RPM によって提供されるため、require パッケージを使用しました。
exec {"nrpe nagios membership":
unless => "/bin/getent group nagios|/bin/cut -d: -f4|/bin/grep -q nrpe",
command => "/usr/sbin/usermod -a -G nagios nrpe",
require => Package['nrpe'],
}