我有几百个具有不同configuration文件的一次性服务器,这些文件需要存在于一个目录中。 这些文件的副本驻留在木偶大师身上。
在我的其中一个类中,我有一组默认的configuration,总是被推送到节点,如下所示:
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", } )
我对木偶不是很熟悉,但是我觉得没有办法做到这一点。
你可以用这个来做你正在尝试的东西:
file { "/etc/someprogram/config": ensure => directory, recurse => remote, source => "puppet:///modules/someprogram/files/$fqdn" #Other options }
这将复制$ fqdn中的所有文件到/ etc / someprogram / config中,如果它们已经存在,则将其覆盖。
如果你想在一个目录中定义多个文件而不recursion整个目录,你可以使用一个数组 – 就像这样:
$myfiles = [ "/my/dir/file1", "/my/dir/file2", ] file { $myfiles: ensure => "present", owner => "root", group => "root", mode => 0644, source => "puppet:///modules/someprogram/$fqdn/$name", }
当然,如果path是“/ my / dir”或很多文件,它会变得有点笨拙,所以在这种情况下,最好创build一个包含目录path的定义,然后传递它的文件名。
这里是我如何做到这一点的一个例子:
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调度器。