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

如何解决Chef Client 14.6.47下7zip安装失败的NameError问题

问题分析与修复方案

错误根源

触发NameError: undefined local variable or method 'source'的原因主要两点:

  1. 你引用的节点属性node[:packages][:ziputil]未在Chef节点/环境中定义,导致source属性值为空,引发资源解析错误
  2. Chef的windows_zipfile资源不支持直接使用远程URL作为source参数,必须先将压缩包下载到本地文件系统,再指向本地路径进行解压

修复步骤

1. 配置节点属性(或直接硬编码URL)

如果要保留节点属性的方式,需在Chef节点配置或环境文件中添加该属性:

# 节点属性文件或环境文件中添加
default['packages']['ziputil'] = 'http://downloads.sourceforge.net/sevenzip/7za920.zip'

如果不需要动态配置,也可以直接在配方中写死URL。

2. 新增下载+解压的完整流程

使用remote_file先将远程压缩包下载到本地临时目录,再用windows_zipfile解压:

# 创建临时目录(如果不存在)
directory 'C:/temp' do
  action :create
  recursive true
end

# 定义本地zip文件路径
local_zip = 'C:/temp/7za920.zip'

# 下载远程压缩包到本地
remote_file local_zip do
  source node['packages']['ziputil'] # 或替换为硬编码URL:'http://downloads.sourceforge.net/sevenzip/7za920.zip'
  action :create
  not_if { ::File.exists?('c:/dirname/7za.exe') }
end

# 解压本地zip文件到目标目录
windows_zipfile 'c:/dirname/' do
  source local_zip
  action :unzip
  not_if { ::File.exists?('c:/dirname/7za.exe') }
end

3. 额外验证项

  • 确认目标Windows节点能访问SourceForge的下载地址,无防火墙/代理拦截
  • 检查目标解压目录c:/dirname/的权限,确保Chef Client运行账号有写入权限

内容的提问来源于stack exchange,提问作者Santosh Garole

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 09:30:28