如何在chef中循环加密数据包



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

下面是我在recipie中尝试的代码,但循环总是返回加密值。

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类中的大多数方法。所以在第一个例子中,我们看起来可以循环遍历散列。

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哈希那样迭代。EncryptedDataBagItem类将一个名为#的方法公开给hash,该方法提供一个解密的数据包。使用此方法循环通过数据袋项目

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

数据包项支持Ruby的Hash类中的大多数方法。有关详细信息,请参阅Hash#each文档。

最新更新