2015-01-21 42 views
0

我設計了ruby中的代碼,它通過電子表格和代碼將我的xls部分轉換爲json。我需要將這個json上傳到廚師服務器上的數據包中。我使用ruby代碼的刀子命令並運行它。該JSON文件上傳到我的本地廚師回購正確的,但對於轉移到廚師服務器我收到此錯誤:從Ruby上傳數據包時出錯

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正確顯示節點。我是廚師和紅寶石新手,搜索並嘗試了很多東西,但沒有工作。

+0

此外,如果我從廚師回購中運行完全相同的命令,它可以正常工作並將json上傳到數據包。 – user3264632 2015-01-21 09:35:09

+0

可以肯定,你的json文件路徑是'[/] chef-repo/data_bags/TestDB/default_1.json'吧? – Tensibai 2015-01-21 10:27:22

+0

是的,代碼文檔和.xls存儲在廚師回購 – user3264632 2015-01-22 05:31:11

回答

0

令人驚訝地得到解決!我將所有文檔存儲在chef-repo中,並將一個文件分成兩個文件,第一個將.xls轉換爲json,另一個執行knife命令。我現在可以像預期的那樣從廚師回購和工作中運行ruby腳本。唷!