从 Ruby 上传数据包时出错

Error in uploading Data bag from Ruby

我在 ruby 中设计了代码,它通过电子表格和代码将我的 xls 部分转换为 json。我需要将这个 json 上传到我在 chef-server 上的数据包中。我正在使用来自 ruby 代码和 运行 代码的 knife 命令。 json 文件正确上传到我本地的 chef-repo,但是为了传输到 chef-server,我收到了这个错误:

ERROR: Chef::Exceptions::ValidationFailed: Data Bag Items must contain a Hash or Mash!

我已验证 json,id 与文件名匹配,并尝试在开始和结束处使用 [] 大括号,但不起作用。这是我 json:

的开始

{ "id": "default_1", "Sr.No":“1”,....}

我的 ruby 代码要点如下:

 require 'spreadsheet'
 book = Spreadsheet.open('BI.xls')
 sheet1 = book.worksheet('Sheet1') 
.
.
.
cmd1 = "cd #{current_dir}/chef-repo"
cmd2 = "knife data_bag create TestDB" #tried knife data bag too
cmd4 = "knife data_bag from file TestDB default_1.json" #tried knife data bag too

upload = %x[#{cmd1} && #{cmd2}  && #{cmd4} ]
puts "#{upload}"

命令knife node list 正确显示节点。我是厨师的新手 ruby ,搜索并尝试了很多东西但没有用。

出人意料的解决了!我将所有文档存储在 chef-repo 中,并将一个文件分成两个,第一个将 .xls 转换为 json ,另一个执行 knife commands 。我现在 运行 来自 chef-repo 的 ruby 脚本和预期的工作。呸!