加载通过 Chef 代码创建的 Chef 数据包项目时出错
Error while loading Chef data bag item, created via Chef code
我有两个与此问题相关的问题。 (已解决的问题,下面提供了解决方案)
我有一个名为 java 的数据包。里面包含了每个节点hostname具体的数据包项,如下图
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
问题一:如何从上面的数据包item格式中取值?
如果我创建如下数据包,我可以获取 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']
问题二:我之前的数据包项实现哪里做错了?
问题已解决::
我现在可以按照下面提到的格式创建数据包项目,能够成功获取数据
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']
我已经在问题本身中添加了解决方案。但是为了读者的利益,我把它添加到答案部分。
我能够按照下面提到的格式创建数据包项并能够成功获取数据
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 及其值添加了大括号“{}”而不是方括号“[]”。
我有两个与此问题相关的问题。 (已解决的问题,下面提供了解决方案)
我有一个名为 java 的数据包。里面包含了每个节点hostname具体的数据包项,如下图
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
问题一:如何从上面的数据包item格式中取值?
如果我创建如下数据包,我可以获取 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']
问题二:我之前的数据包项实现哪里做错了?
问题已解决:: 我现在可以按照下面提到的格式创建数据包项目,能够成功获取数据
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']
我已经在问题本身中添加了解决方案。但是为了读者的利益,我把它添加到答案部分。
我能够按照下面提到的格式创建数据包项并能够成功获取数据
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 及其值添加了大括号“{}”而不是方括号“[]”。