我知道Facter并不打算这样做,但是我很乐意知道如何编写一个自定义的事实来将文件从Puppet客户端复制到主要的Puppet服务器。 谢谢。
将文件复制为事实 ? 你为什么想这么做? 你可以简单地有一个Exec scp或ftp在其他地方的文件。
如果您需要检查文件的内容,请以此为例:
# 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发送文件,使用身份来避免传递密码,然后返回ok或not ok事实。
我认为更好的方法是使用远程filebucket审计(我相信你需要2.6.5以上)。
就像是:
filebucket { "server": server => "your.puppet.server"; } file { "/etc/group": audit => content; backup => server; }
这会导致/ etc / group在(a)更改或(b)以前没有看到时上载到服务器。 然后,在服务器上,您可以使用“puppet filebucket”工具检查客户端发送的数据。 这比把它放在事实上要好得多。