web-dev-qa-db-ja.com

パペットを使用してグループに既存のユーザーを追加する

既存のユーザーをパペット2.7.18のグループに追加することはできますか?

2つのモジュールがあり、それぞれが1つのクラスを定義します。

  • モジュール「user」は、ユーザーfooとユーザーbarを含むすべてのユーザーを作成します。
  • モジュール「Subversion」はさまざまなconfファイルを扱い、グループsvnを作成します。

モジュール「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で再宣言できません

この機能はすでに実装されていますか?そうでない場合、良い回避策はありますか?

17
user130370

ユーザーを virtual resources として宣言した場合、 'realize'またはコレクション構文(User <| ... |>)を使用できます。次に例を示します。

@user { 'foo':
  groups     => ['somegroup'],
  membership => minimum,
}

次に、コレクション構文で仮想ユーザーを認識します。

User <| title == foo |>

他の場所では、plusignmentを使用してその仮想リソースのパラメーターに追加できます。

User <| title == foo |> { groups +> "svn" }
15
dotplus

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が属する既存のグループに追加します。

22
dodocaptain

ありがとう-確かに醜いハックですが、仕事は完了です。以下は、「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'],
  }
3
Bill McGonigle