
是否可以告诉 Puppet 为一个(或所有)节点编译一个目录并将特定数据保存在某处?
我特别感兴趣的是获取每个节点所需的所有包及其版本,但获取任何数据的通用方法也是合适的。
答案1
更新
这个原始答案现在已经过时了。 Puppet 3.x 的更新命令是:
puppet resource package
如果您要查找节点上安装的所有软件包和版本,无论它们是否由 Puppet 安装,则以下命令是内置的,可以在任何 Puppet 节点上运行:
ralsh package
这会将数据以 Puppet 清单形式输出到标准输出。
Ralsh 适用于任何已instances
实现该方法的资源类型(用户、组等)。
如果您希望集中检查 Puppet 清单中定义的所有资源的 YAML 目录,您的 Puppetmaster 已经缓存了此信息,/var/lib/puppet/client_yaml/catalog
您只需使用您选择的 YAML 解析器对其进行解析即可。最近推出的 Puppet Inventory Service 也可能是一个不错的选择;如果您运行的是旧版本(如 0.25.x),则可以使用 storeconfigs。
答案2
说实话,这正是 mcollective 的初衷。具体来说,mcollective 的软件包提供程序:http://projects.puppetlabs.com/projects/mcollective-plugins/wiki/AgentPackage
这完全跳过了 puppet,甚至不需要安装 puppet。