如何在厨师中循环加密数据包

How to loop an encrypted data bag in chef

我有一个加密数据包,其中包含多个 elements.How 循环遍历加密数据包中的所有元素。

下面是我在收件人中尝试的代码,但循环总是 return 加密值。

db_details = data_bag_item("data-bag-item", "data_bag_id",IO.read("# {node['secret-file']}"))

<% @db_details.each_pair do |key, value| %>
<%= "INSERT INTO data (key, value) VALUES 
('#{key}', '#{value}';" %>
<% end %>

数据包项支持 Ruby 的 Hash class 中的大多数方法。参见 the Hash#each documentation for details

数据包项支持来自 Ruby 的 Hash class.So 的大多数方法,首先看起来我们可以循环遍历哈希。

db_details = data_bag_item("data-bag-item", "data_bag_id",IO.read("#   {node['secret-file']}"))

<% @db_details.each_pair do |key, value| %>
<%= "INSERT INTO data (key, value) VALUES 
('#{key}', '#{value}';" %>
<% end %>

但 EncryptedDataBagItem 表示一个 read-only 数据包项目,其中所有值,除了与 id 键相关联的值,都已 encrypted.So 它不能像正常 ruby 一样迭代hash.EncryptedDataBagItem class 公开一个名为#to hash 的方法,它给出一个解密数据bag.Use 这个方法循环遍历数据包项

<% @db_details.to_hash.each_pair do |key, value| %>
<%= "INSERT INTO data (key, value) VALUES 
('#{key}', '#{value}';" %>
<% end %>

使用to_hash.

db_details = data_bag_item("data-bag-item", "data_bag_id",IO.read("# {node['secret-file']}"))
db_details_iterable = db_details.to_hash
db_details_iterable.each do |k, v|
   ...
end