将所有Puppet客户端的条形文件复制到主Puppet服务器的自定义事实

我知道Facter并不打算这样做,但是我很乐意知道如何编写一个自定义的事实来将文件从Puppet客户端复制到主要的Puppet服务器。 谢谢。

文件复制事实 ? 你为什么想这么做? 你可以简单地有一个Exec scpftp在其他地方的文件。

如果您需要检查文件的内容,请以此为例:

 # etcgroup.rb Facter.add("etcgroup") do setcode do File.read('/etc/group') end end 

然后你可以使用正则expression式来从里面提取信息。 请注意,这是作为GET请求的URL的一部分发送的,GET请求通常受限于字符数。 我有一个LimitRequestLine 30000在我的apache2.conf只是这样一个原因。

如果你确实需要复制文件,你可以这样做:

 # etcgroup.rb Facter.add("etcgroup") do setcode do %{ scp -i /path/to/identity /etc/group user@puppet:/path && echo ok || echo not ok}.chomp end end 

它会通过scp发送文件,使用身份来避免传递密码,然后返回oknot ok事实。

我认为更好的方法是使用远程filebucket审计(我相信你需要2.6.5以上)。

就像是:

 filebucket { "server": server => "your.puppet.server"; } file { "/etc/group": audit => content; backup => server; } 

这会导致/ etc / group在(a)更改或(b)以前没有看到时上载到服务器。 然后,在服务器上,您可以使用“puppet filebucket”工具检查客户端发送的数据。 这比把它放在事实上要好得多。