web-dev-qa-db-ja.com

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

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

私のクラスの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",
}
)

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

8
Freshy

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

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

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

8
meatflag

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

$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"または多くのファイルへの長いパスを使用すると、少し扱いに​​くくなるので、その場合は、ディレクトリパスを含む定義を作成し、次の配列を渡すだけのほうがよいでしょう。それにファイル名。

3
Paul Gear

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

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スケジューラーを割り当てています。

1
Sam Caldwell