2016-11-10 3 views
1

人形のリソースにパラメータが設定されている場合にのみ渡す方法はありますか?たとえば、新しいユーザーを作成するマニフェストがあり、uidとgidを手動で設定する場合としない場合があります。私がやって考えることができる最善の方法は、このようなものです:オプションで人形のリソースにパラメータを渡す

class example (
    $uid  = undef, 
    $gid  = undef, 
    $username = 'default' 
) { 
    user { $username: 
     ensure => present, 
     # etc 
    } 

    if $uid != undef { 
     user { "uid-${username}": 
      name => $username, 
      uid  => $uid, 
      require => User[$username] 
     } 
    } 

    if $gid != undef { 
     user { "gid-${username}": 
      name => $username, 
      gid  => $gid, 
      require => User[$username] 
     } 
    } 
} 

しかし、それはただのuidおよび/またはGIDを送信するかどうかを判断するために多くのコードです。より良い方法がありますか?

答えて

1

リソースのnameが一意性のチェック対象なので、複数の宣言のためにあなたの例がコンパイルに失敗すると思います。それは言われている、私の意見でこれを少し良くするいくつかの方法があります。

第一の方法は修正属性を含む:

... 
user { $username: 
    ensure => present, 
    # etc 
} 

if $uid != undef { 
    User[$username] { uid => $uid } 
} 

if $gid != undef { 
    User[$username] { gid => $gid } 
} 

第二のハッシュから属性を設定することを含む:

class example (
    Hash $id   = {}, 
    String $username = 'default' 
) { 
    user { $username: 
     ensure => present, 
     *  => $id, 
     # etc 
    } 
} 

した後のいずれかで宣言経由で追加のパラメータ渡し:

class example { 'foo': 
    username => 'bar', 
    id  => { uid => 1000, gid => 1000 } 
} 

または同様の自動Hieraルックアップを使用する:

example::id: 
    uid: 1000 
    gid: 1000 

いずれの場合においてもidを指定しない(宣言またはHiera)が依然としてuidまたは改変gidなしuserリソースの正しいと予想される動作をもたらすであろうことに留意されたいです。

https://docs.puppet.com/puppet/latest/reference/lang_resources_advanced.htmlには2つの方法が記載されていますが、そのドキュメントから別の方法を見つけ出すことさえできます。

+0

ハッシュからの設定は、私が探しているものとまったく同じです。リンクありがとう! – mounty

関連する問題