You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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'后问题消失,验证了这一点。

解决建议:

  1. 移除自定义函数中不必要的activerecord-jdbc-adapter依赖
  2. 若必须使用该依赖,需确保其版本与Puppet Server的JRuby环境兼容,避免冲突
  3. 全面检查所有自定义模块的外部依赖,排查类似环境冲突问题

内容的提问来源于stack exchange,提问作者Maxim Maximov

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.14 15:52:32