Puppetを使用して既存のユーザーをグループに追加する


16

puppet 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:重複宣言:User [foo]は、ファイル/pathto/modules/subversion/manifests/init.ppの行xxで既に宣言されています。ノードmyserver.example.comの/pathto/modules/users/manifests/init.pp:xxxで再宣言できません

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

回答:


15

ユーザーを仮想リソースとして宣言する場合、 'realize'またはコレクション構文(User <| ... |>)を使用できます。以下に例を示します。

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

次に、コレクション構文を使用してその仮想ユーザーを実現します。

User <| title == foo |>

また、プラスイグメントを使用して、その仮想リソースのパラメーターに追加できます。

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

だから、現時点では仮想リソース以外には代替手段がないと思う:(答えに感謝します。

1
Puppetバージョン間でタイプミスまたは属性が変更されています。グループではなくグループ(複数)です。Puppet 3.2.2の使用
Goran Miskovic

1
誰かが短い例を使ってこれを拡張できますか。
mschuett

21

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


1
Puppetは、実行可能ファイルへの完全修飾パスを必要とする場合があります。これを反映するように編集されました。
h7r 14

2
恐ろしくてハッキーだが、本当に役立つ。ユーザーをグループに追加するという概念的に単純なことを行うために、新しい言語構成を学ぶ必要がないことを望んでいました。
ビルマン

1
おそらく、より適切な(もちろん、まだハッキングされている)方法は、を使用getent group somegroup|cut -d: -f4|grep -q fooしていると仮定しないために使用することです/etc/group
ファルストロ14

とても助かりました-ありがとう。"... /ユーザー/ binに/ usermodの"ない限り=> "/ユーザー/ binに/ grepの..."コマンド=>:私は以下のように完全なパスを含めることは"ない限り"と"usermodのを"変更しなければならなかった
JNP Web開発者

@jnpWebDeveloperおよびそのようなものの場合:ドキュメントに従って、pathパラメーターも指定できます。グローバルリソースのデフォルトを使用することをお勧めします。これはおそらく$PATHファクターから引き出されます。
シンコデナダ

2

ありがとう-確かにいハックですが、仕事は完了です。「nagios」グループに「nrpe」を追加するためのパス付きの例(上記のコメントを組み合わせたもの)です。ここではユーザーがpuppetではなくRPMを提供しているため、パッケージが必要です。

  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'],
  }
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.