加载Chef数据包项目时出错,通过Chef代码创建

时间:2015-05-26 16:30:13

标签: ruby chef chef-recipe databags chef-attributes

我有两个与此问题相关的问题。 (已解决的问题,以下提供的解决方案)

我有一个名为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']

1 个答案:

答案 0 :(得分:0)

我在问题中添加了解决方案。但为了读者的利益,我将其添加到答案部分。

我能够以下面提到的格式创建数据包项目,并且能够成功获取数据

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['java_config']['jdk_version'] 

添加花括号" {}"而不是方括号" []"对于jdk_version及其值,同时创建数据包项哈希。