2016-04-26 14 views
6

パペットで管理されていないディレクトリに多数のファイルをインストールする必要があります。各ファイルのsourceは、私のモジュールのサブディレクトリfiles/の下にあります。1つのファイルリソースで複数のファイルをインストールする方法

所有権とアクセス許可がすべて同じであるため、すべて一括でインストールしたいと考えています。しかし、sourceの場合はどうすればいいですか?残念ながら、(ここでは3.7.5を使用して)人形が自動的に適切foobarを追加するために十分にスマートではありません、

file {[ 
    "${rcdir}/foo", "${rcdir}/bar", 
    ]: 
    source => "puppet:///${module_name}/", 
    group => 'wheel', 
    owner => 'root', 
    mode => '0644' 
    } 

しかし:私は単にディレクトリを指定するとうまくいく、期待していました。

これを行うには良い方法がありますか、苦労して各ファイルを列挙しなければなりませんか?ありがとうございました!

答えて

7

ここでは、それぞれに長所と短所があります。

各ファイルを個別に設定したり、管理しているファイルの完全なリストを見ることができる最も明白なのは、各ファイルを個別に定義することです。コードの重複を減らすために、型のデフォルトを利用することができます(これは必ずしも適切ではありません)。これは次のようになります:

File { 
    group => 'wheel', 
    owner => 'root', 
    mode => '0644', 
} 
file { "${rcdir}/foo": 
    source => "puppet:///modules/${module_name}/foo", 
} 
file { "${rcdir}/bar": 
    source => "puppet:///modules/${module_name}/bar", 
} 

これは明らかに非常に扱いにくくなります。

第2の戦略は、定義されたタイプを利用することです。これは、このようなものに使用するための重いツールのビットですが、それはトリックを行うでしょう。これは、比較的任意の定義されたタイプに追加する必要がありますし、コアファイルで使用可能なすべてのプロパティを通過するようにしたい場合は、他の多くのパラメータを追加するためにあなたを必要として終わる

define myclass::file_array (
    $dest_base, 
    $source_base, 
    $group = 'wheel', 
    $owner = 'root', 
    $mode = '0644', 
) { 
    file { "${dest_base}/${name}": 
    source => "${source_base}/${name}", 
    group => $group, 
    owner => $owner, 
    mode => $mode, 
    } 
} 
class myclass(){ 
    $files_to_manage = ['foo', 'bar', 'baz'] 
    myclass::file_array { $files_to_manage: 
    source_base => "puppet:///modules/${module_name}", 
    dest_base => $rcdir, 
    } 
} 

:これは次のようになりますしかし、あなたの状況には十分です。

しかし、あなたがしようとしていることを行う最も簡単で簡単な方法は、ファイルリソースがその再帰的機能を利用できるようにすることであり、必要なすべてのファイルをモジュールの独自のディレクトリに置きます。この宛先ディレクトリとは無関係です)。 Puppetにディレクトリの存在を管理させる必要がありますが、これはあなたにとって問題であると想像するのは難しいです(宛先ディレクトリが既に存在しない場合はこのコードのいずれかが失敗するため)。これは、このようなものになります。

file { $rcdir: 
    ensure => directory, 
    recurse => true, 
    source => "puppet:///modules/${module_name}/rc_files", 
    owner => 'root', 
    group => 'wheel', 
    mode => '0644', 
} 
// module directory 'files/rc_files' is where foo and bar would exist 

を私は最後のものは、あなたの理想的なソリューションです、あなたは余分なファイルが終了していないことを検証するために、このようなパージなどのファイルリソース(https://docs.puppet.com/puppet/latest/reference/type.html#file-attribute-recurse)の他の側面を利用することができると確信していますあなたの目的地で。

そこには他のテクニックがありますが、うまくいけばこれらのうちの1つがあなたのためにトリックを行います。

+0

ありがとうございました。詳細な答えは「はい」ですが、「再帰的」は私が探していたものですが、ここでは$ rcdirはPuppetによって管理されていません。これは '/ etc/rc.d/init.d'であり、すでにこのモジュールと無関係なファイルがたくさん含まれています。私は、あなたが望むなら、他のモジュールも使うことができる方法を考え出しています。これはできません。 –

+0

@MikhailT。、Puppetを介してディレクトリを管理することは必要ありません内のすべてのファイルが管理されます。 –

+0

@JohnBollinger、はい、それは私の問題ではありません。 *私の*モジュールがこのディレクトリを管理するのを望んでいません。他のモジュールができないからです。 –

関連する問題