Puppet Agent缓存库异常删除致Concat_file资源类型缺失求助
Puppet Agent缓存目录异常删除问题解决
环境信息
服务器:
- Puppet Server 7.9.2(基于pupperware docker compose部署),包含大量自定义模块
代理端: - CentOS7系统,Puppet Agent 7.25.0
问题现象
- 首次执行
puppet agent --test:缓存所有库文件,目录应用成功 - 第二次执行:
/opt/puppetlabs/puppet/cache/lib下所有库被删除,报错Error: Failed to apply catalog: Resource type 'Concat_file' was not found - 第三次执行:缓存库未按预期恢复,报错相同
排查结果
- 未配置主动清理
cache/lib目录的规则 - 仅保留
info("DEBUG")的极简site.pp不会触发目录清理 - 首次执行前手动创建的
cache/lib/puppet1目录在执行时被删除 - 检查目录JSON文件,未发现清理
cache/lib的资源配置 - 代理端可正常识别
concat_file.rb,但第二次执行日志显示该文件所在目录被移除 - 重启Puppetserver后,会重复“恢复缓存→删除缓存”的循环
复现步骤
配置以下文件即可触发问题:
自定义函数文件 ./lib/puppet/functions/brakepuppet.rb
require 'activerecord-jdbc-adapter' Puppet::Functions.create_function(:brakepuppet) do dispatch :brakepuppet do required_param 'String', :print_text end def brakepuppet(print_text) return print_text end end
主清单文件 ./manifest/site.pp
info("This is DEBUG") file { default: ensure => 'file', owner => 'root', group => 'root', mode => '0644'; '/tmp/test.test': content => brakepuppet("Print this text please"); }
根因与解决方案
问题由自定义函数中引入的activerecord-jdbc-adapter依赖导致:该依赖与Puppet Server的JRuby运行环境冲突,引发目录编译/缓存同步异常,最终触发代理端缓存目录的错误清理。
注释掉require 'activerecord-jdbc-adapter'后问题消失,验证了这一点。
解决建议:
- 移除自定义函数中不必要的
activerecord-jdbc-adapter依赖 - 若必须使用该依赖,需确保其版本与Puppet Server的JRuby环境兼容,避免冲突
- 全面检查所有自定义模块的外部依赖,排查类似环境冲突问题
内容的提问来源于stack exchange,提问作者Maxim Maximov
相关产品推荐
相关产品推荐

