0
我有兩個問題與問題相關。 (解決問題,下面提供解決方案)加載廚師數據袋項目時出錯,通過廚師代碼創建
我有一個名爲數據包,JAVA。它包含具體到每個節點的主機名數據包項目,如下圖所示
id: node_hostname
java_config:
jdk_version: 7
我能夠用廚師代碼
dbag_hash = Hash[ "id" => node['hostname'], "java_config" => [ "jdk_version" => "7" ] ]
databag_item = Chef::DataBagItem.new
databag_item.data_bag("java")
databag_item.raw_data = dbag_hash
databag_item.save
userDataBag = data_bag_item('java', node['hostname'])
jdk_version = userDataBag['jdk_version']['java_config']
創建數據包,但在執行的食譜,我是在代碼中獲取低於錯誤的位置,它將值分配給jdk_version
>> jdk_version = userDataBag['java_config']['jdk_version']
TypeError
---------
can't convert String into Integer
問題1:如何從上述數據包項目格式獲取值?
如果我創建數據包下面,我能夠獲取jdk_version
id: node_hostname
jdk_version: 7
守則上面的格式來創建數據包
dbag_hash = Hash[ "id" => node['hostname'], "jdk_version" => "7" ]
databag_item = Chef::DataBagItem.new
databag_item.data_bag("java")
databag_item.raw_data = dbag_hash
databag_item.save
userDataBag = data_bag_item('java', node['hostname'])
jdk_version = userDataBag['jdk_version']
問題2:我在做什麼錯在之前的數據包項目實現中?
解決的問題:: 我現在可以在以下提到的格式創建數據包項目,能夠獲取數據成功
id: node_hostname
java_config:
jdk_version: 7
增加了「{}」括號而非「 []「爲jdk_version及其值,同時創建數據包項哈希。
工作代碼如下規定,
dbag_hash = Hash[ "id" => node['hostname'], "java_config" => { "jdk_version" => "7" } ]
databag_item = Chef::DataBagItem.new
databag_item.data_bag("java")
databag_item.raw_data = dbag_hash
databag_item.save
userDataBag = data_bag_item('java', node['hostname'])
jdk_version = userDataBag['java_config']['jdk_version']
供參考:它更易於定義散列在紅寶石/廚師例如:'dbag_hash = { ID:節點[ '主機'], java_config:{ jdk_version: 「7」 } }'(技術上這使用符號作爲散列鍵,而不是字符串,但在廚師他們通常是可以互換的,特別是在'節點'屬性或數據袋。) – Roland
感謝您的澄清羅蘭.. –