【发布时间】:2015-01-21 08:49:49
【问题描述】:
我在 ruby 中设计了代码,它通过电子表格和代码将我的 xls 部分转换为 json。我需要将此 json 上传到我在 chef-server 上的数据包中。我正在使用来自 ruby 代码的刀命令并运行它。 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 正确显示节点。我是 chef 和 ruby 的新手,搜索并尝试了很多东西但没有用。
【问题讨论】:
-
另外,如果我从我的 chef-repo 运行完全相同的命令,它会正常工作并将 json 上传到数据包。
-
可以肯定的是,你的json文件路径是
[...]/chef-repo/data_bags/TestDB/default_1.json吧? -
是的,代码文档和 .xls 存储在 chef-repo 中
标签: ruby json chef-infra