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

时间:2015-11-25 20:40:39

标签: chef

我有一个包含多个元素的加密数据库。如何遍历加密数据包中的所有元素。

以下是我在我的收件人中尝试过的代码,但循环始终返回加密值。

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 %>

3 个答案:

答案 0 :(得分:1)

数据包项目支持Ruby的Hash类中的大多数方法。所以在第一个实例中它看起来我们可以循环遍历哈希。

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表示一个只读数据包项,其中除了与id键相关联的值之外的所有值都已加密。因此它不能像普通的ruby hash一样迭代.EncryptedDataBagItem类公开一个名为#to的方法提供解密数据包的哈希。使用此方法循环数据包项目

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

答案 1 :(得分:1)

使用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

答案 2 :(得分:0)

数据包项目支持Ruby的Hash类中的大多数方法。请参阅the Hash#each documentation for details