我知道 Facter 并非旨在执行此操作,但我很高兴知道如何编写自定义事实以将文件从 Puppet 客户端复制到主 Puppet 服务器。谢谢。
答案1
复印文件作为事实? 你为什么要这么做?你可以简单地将Exec
文件移到其他地方scp
。ftp
如果需要检查某个文件的内容是否属实,请看以下示例:
# etcgroup.rb
Facter.add("etcgroup") do
setcode do
File.read('/etc/group')
end
end
然后,您可以使用正则表达式函数从其中提取信息。请注意,这是作为 GET 请求的 URL 的一部分发送的,通常字符数有限制。我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
作为事实。
答案2
我认为更好的方法是使用远程文件存储桶进行审计(我相信您需要 2.6.5+ 版本)。
就像是:
filebucket { "server":
server => "your.puppet.server";
}
file { "/etc/group":
audit => content;
backup => server;
}
这会导致 /etc/group 在 (a) 发生变化或 (b) 之前未曾见过时上传到服务器。然后,您可以在服务器上使用“puppet filebucket”实用程序检查客户端发送的数据。这比将其放在事实中要好得多。