0

この問題に関連して 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']
4

1 に答える 1