使用Puppet使用来自多个主机的事实创build一个文件

我试图让puppet构build一个如下所示的configuration文件:

[All] Hosts=apt-dater@puppetmaster;apt-dater@blaster; (etc...) 

基本上,这个文件需要包含apt-dater类的每个节点的条目。 我一直在试验导出的资源,但我找不到把它放在一起的干净方式。 我应该如何去创build这个文件?

我假设你已经理解出口和收集个人types资源的原则。 而不是如何将这些个人资源翻译成单个文件。 木偶有两个方法来做到这一点:

  • Augeas
  • RIPienaar的puppet-concat模块

Augeas是一个非常聪明的工具,但它可以certificate复杂,如果你必须开始写作和分配自己的镜头。 然而puppet-concat却很容易掌握。 我还没有testing以下的语法,但它应该设置你在正确的轨道上:

 # apt-dater/manifests/server.pp class apt-dater::server { file { "/somepath/apt-dater/hosts.conf": } concat::fragment{ "apt-dater_hosts_header": content => "[All]\nHosts=", order => 1, } Apt-dater::Client <<| |>> } # apt-dater/manifests/defines/register.pp define apt-dater::register($order=10) { concat::fragment{ "apt-dater_hosts_$name": target => "/somepath/apt-dater/hosts.conf", content => "apt-dater@${name};", } } # apt-dater/manifests/client.pp class apt-dater::client { @apt-dater::register{ "$hostname": } } 

然后设置节点:

 # On the central server. include apt-dater::server # On each of the client nodes. include apt-dater::client