我有一个 Perl 脚本,我将其推送到所有 Puppet Linux 客户端。此后,我在 Puppet 主服务器上编辑了我的脚本 module/modulename/files/scripts/a_script 脚本,但客户端没有收到更改,因为它们有该文件。显然它没有校验和或使用 modtime。确保文件与主版本保持同步的最佳做法是什么?我需要编写校验和逻辑吗,还是已经有内置功能了?
我最初推送的代码是:
file { '/sbin/a_script':
ensure => present,
mode => 744,
owner => root,
source => "puppet:///modulename/scripts/a_script"
}
显然,删除文件然后将其拉回来是一种不明智的解决方案,我希望能找到更有效的办法。
更新 Puppet 会在下次运行时对 puppet:/// filebucket 中的文件进行校验和并同步,我肯定遇到了错误,导致文件声明无法运行。当我将声明移至 site.pp 时,它确实将更改同步到客户端上已经存在的文件。
答案1
我建议使用平面目录结构来提供脚本,puppet:///modulename/a_script
例如puppet:///modulename/scripts/a_script
但如果这不是一个选择,这听起来像是recurse
指示。如果没有它,默认操作似乎只会确保您的文件存在,而不考虑内容。
另请查看Puppet 文件类型参考。
- 编辑 -
我以为您正在尝试同步脚本目录。
对于你的情况,Puppet 默认为replace => true
关于文件类型如果源校验和发生变化。
您在客户端系统上的puppet agent -t
输出是什么?puppet agent --debug -t