Puppetを使用して、すべてのファイルを定義せずに、ディレクトリ内の複数のファイルが存在することを確認できますか?


8

私は、ディレクトリに存在する必要があるさまざまな構成ファイルを持つ数百の一時サーバーを持っています。ファイルのコピーはパペットマスターにあります。

私のクラスの1つには、次のように常にノードにプッシュされるデフォルトの構成セットがあります。

file { "/etc/someprogram/config/000-default":
  ensure => "present",
  owner => "root",
  group => "root",
  mode =>  0764,
  source => "puppet:///modules/someprogram/000-default",
}

私が欲しいのは次のようなものです:

$filearray = directory listing of /etc/puppet/modules/someprogram/files/$fqdn
with each file as an element into array

$filearray.each(
file { "/etc/someprogram/config/$filename":
  ensure => "present",
  owner => "root",
  group => "root",
  mode =>  0764,
  source => "puppet:///modules/someprogram/files/$fqdn/$filename",
}
)

私は人形にあまり慣れていませんが、これを行う方法がないという印象を受けています。


1
各ファイルを個別のリソースとして宣言するのではなくrecurse => true、これらが存在する(fileタイプ上にある)ディレクトリを再帰的に管理しますか?
シェーンマッデン、2014

回答:


8

あなたはこれであなたがしようとしていることをすることができます:

file { "/etc/someprogram/config":
    ensure => directory,
    recurse => remote,
    source => "puppet:///modules/someprogram/files/$fqdn"
    #Other options
}

これにより、$ fqdn内のすべてのファイルが/ etc / someprogram / configにコピーされ、すでに存在する場合は上書きされます。


1
またrecurse => remote、問題のディレクトリに、puppetサーバーによってプッシュされないローカルファイルがあるかどうかも確認してください。
Zoredache 2014

これは良いヒントです。これが仕様に追加されたことを知りませんでした。これを反映するようにオリジナルを編集しました。
ミートフラッグ2014

3

ディレクトリ全体を再帰せずにディレクトリ内の複数のファイルを定義する場合は、次のように配列を使用できます。

$myfiles = [ "/my/dir/file1", "/my/dir/file2", ]
file { $myfiles:
    ensure => "present",
    owner  => "root",
    group  => "root",
    mode   =>  0644,
    source => "puppet:///modules/someprogram/$fqdn/$name",
}

もちろん、 "/ my / dir"または多くのファイルへの長いパスを使用すると、少し扱いに​​くくなるので、その場合は、ディレクトリパスを含む定義を作成して、それにファイル名。


aliasファイルにセットがある場合は残念ながらこれは機能しません:/
cweiske

1
入力ミスがあるようです$ myfiles-> $ files
Fabrizio Regini 2014年

1
これは機能しません。$nameここでは参照できません。それが定義されたタイプである場合にのみ機能します。
2015年

1

これが私がこれを行う方法の例です:

file {
        [
        '/sys/block/sda/queue/scheduler',
        '/sys/block/sdb/queue/scheduler',
        '/sys/block/sdc/queue/scheduler',
        '/sys/block/sdd/queue/scheduler',
        '/sys/block/sde/queue/scheduler',
        '/sys/block/sdf/queue/scheduler'
        ]:
  ensure  => 'file',
  content => 'deadline',
  group   => '0',
  mode    => '644',
  owner   => '0',
  type    => 'file',
}

上記の例では、Puppetを使用して、特定のサーバー上の各ディスクに締切I / Oスケジューラーを割り当てています。

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