如何将指定cURL请求转换为Chef Recipe中的http_request资源?
转换cURL到Chef http_request资源方案
当然可以帮你把这个cURL请求转换成更简洁的Chef http_request资源!咱们直接看实现代码,再拆解细节:
完整Recipe代码
# 引入multipart上传所需的依赖库 require 'net/http/post/multipart' http_request 'restore_sonarqube_quality_profile' do url "#{node['sonarqube']['rest_uri']}/qualityprofiles/restore" action :post basic_auth 'admin', 'admin' body do # 构建multipart表单,对应curl的-F参数 Net::HTTP::MultipartPost.new( URI.parse(url), 'backup' => UploadIO.new('/tmp/backup2.xml', 'application/xml', 'backup2.xml') ).body end end
代码细节说明
- 请求方法与认证:
action :post对应cURL的-X POST,basic_auth 'admin', 'admin'直接实现-u admin:admin的基础认证,比手动构造header更简洁。 - 文件上传处理:通过
UploadIO包装Vagrant虚拟机里的/tmp/backup2.xml文件,指定MIME类型为application/xml,完美对应cURL中-F backup=@'/tmp/backup2.xml'的表单上传逻辑。 - URL参数:这里假设你把SonarQube的REST URI存在Chef节点属性
node['sonarqube']['rest_uri']中,你可以根据自己的变量替换规则调整这部分。
额外注意事项
- 确保Chef运行用户(通常是root)对
/tmp/backup2.xml有读取权限。 - 如果需要调试对应cURL的
-vverbose输出,可以用chef-client -l debug运行,Chef会打印请求的详细日志。
内容的提问来源于stack exchange,提问作者Gaurav Ojha
相关产品推荐
相关产品推荐

