是否可以使用Puppet来确保目录中存在多个文件而不定义所有文件?


8

我有数百个一次性服务器,这些服务器具有需要在目录中显示的不同配置文件。这些文件的副本位于木偶母版上。

在我的一个类中,我有一组默认配置,这些配置总是推送到节点,如下所示:

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 => truefile类型上),而不是将每个文件都声明为单独的资源?
Shane Madden 2014年

Answers:


8

您可以执行以下操作:

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

这会将$ fqdn中的所有文件复制到/ etc / someprogram / config中,如果文件已经存在,则将其覆盖。


1
还要看看recurse => remote有问题的目录中是否包含local服务器未推送的本地文件。
Zoredache 2014年

这是一个很好的提示,我不知道这已添加到规范中,并进行了原始编辑以体现这一点。
meatflag 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 2014年

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调度程序分配给给定服务器上的每个磁盘。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.