既存のユーザーをパペット2.7.18のグループに追加することはできますか?
2つのモジュールがあり、それぞれが1つのクラスを定義します。
モジュール「Subversion」内のグループsvnにユーザーfooを追加したいと思います。
既存の機能リクエスト で説明されているように、メンバーシップパラメーターを試しました。
group {
"svn":
ensure => present,
gid => xxxxx;
}
user {
"foo":
group => ["svn"],
membership => minimum;
}
しかし、私は次のエラーを受け取ります:
エラー:リモートサーバーからカタログを取得できませんでした:サーバーでエラー400:重複した宣言:ユーザー[foo]はファイル/pathto/modules/Subversion/manifests/init.ppの行xxで既に宣言されています。ノードmyserver.example.comの/pathto/modules/users/manifests/init.pp:xxxで再宣言できません
この機能はすでに実装されていますか?そうでない場合、良い回避策はありますか?
ユーザーを virtual resources として宣言した場合、 'realize'またはコレクション構文(User <| ... |>)を使用できます。次に例を示します。
@user { 'foo':
groups => ['somegroup'],
membership => minimum,
}
次に、コレクション構文で仮想ユーザーを認識します。
User <| title == foo |>
他の場所では、plusignmentを使用してその仮想リソースのパラメーターに追加できます。
User <| title == foo |> { groups +> "svn" }
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が属する既存のグループに追加します。
ありがとう-確かに醜いハックですが、仕事は完了です。以下は、「nrpe」を「nagios」グループに追加するためのパスの例(上記のコメントを組み合わせたもの)です。ここではユーザーがパペットではなく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'],
}