この問題に関連して 2 つの質問があります。(解決済みの問題、以下に解決策を示します)
javaという名前のデータバッグがあります。以下に示すように、各ノードのホスト名に固有のデータバッグアイテムが含まれています
id: node_hostname
java_config:
jdk_version: 7
Chefコードを使用してデータバッグを作成できます
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']