2015-11-13 4 views
6

defineで複数の引数を渡すことになりました。2つ以上の変数をパペットで定義するには

以下は私のコードです。定義の中に2つの配列を渡したいと思いますが、次のように1つだけ渡すことができます。

class test { 
    $path = [$path1,$path2] 
    $filename = [$name1,$name2] 
    define testscript { $filename: } // Can able to pass one value. 
} 

define testscript() { 
    file {"/etc/init.d/${title}": //Can able to receive the file name. 
      ensure => file, 
      content => template('test/test.conf.erb'), 
} 

私の上記のコードから、私はfilenameを定義リソースの中に取り出すことができました。テンプレートの値を設定するには、pathも必要です。私はテンプレートで2番目の引数を送信/取得できません。

定義リソース内に2つの値($path$filename)を渡すようにコードを改善する方法はありますか?

ご迷惑をおかけして申し訳ありません。

+0

クラスに構文エラーが含まれているため、コードから、*定義された型の本体内のファイル名を取得できません。 –

+0

@JohnBollinger:Ooops、それを指摘してもらえますか?私は将来それを修正できるように。 – ArunRaj

+1

パペット自体があなたに伝えるように、定義された型のインスタンスを宣言するときに 'define'キーワードを使用しません。私が答えて言ったように、他のリソースタイプとまったく同じように、定義された型を使用します。 –

答えて

6

定義リソース内に2つの値($ pathと$ filename)を渡すようにコードを改善する方法はありますか?

パペットは、covers this areaのよくあるドキュメントです。

最初に、タイプがリソースタイプであることを理解する必要があります。これは、ほとんどの組み込みタイプまたは拡張タイプに似ています。定義された型がパラメータを受け入れる場合、他のリソース宣言と同じように、それらのパラメータに値をバインドします。たとえば:定義されたタイプはリソースタイプですので、彼らは代わりの機能であるかのように

class mymodule::test { 
    mymodule::testscript { $name1: path => $path1 } 
    mymodule::testscript { $name2: path => $path2 } 
} 

define mymodule::testscript ($path) { 
    file {"${path}/${title}": 
    ensure => 'file', 
    content => template('test/test.conf.erb') 
    } 
} 

また、あなたは彼らにとして「合格」の値の概念を捨てる必要があります。その精神モデルはあなたを裏切る可能性が高いです。特に、リソースタイトルとして配列やハッシュを指定した場合に起こることについて間違った期待を与えることは間違いありません。

特に、任意のリソース宣言で、リソースタイトルを配列として指定すると、配列メンバーがそのリソースのタイトルとして配列メンバーごとに別々のリソースを意味することを理解する必要があります。その場合、これらのリソースのすべては、宣言の本体で宣言されているのと同じパラメーター値を受け取ります。さらに、リソースのタイトルは常に文字列です。上記のように、配列の1つのレベルを除いて、他のものをリソースのタイトルとして与えると、それは文字列に変換されます。

関連する問題