Chef infra 在EncryptedDataBagItems上循环,从特定索引开始或在Chef中没有特定对象
我目前有一个包含一些秘密配置的数据包。每次进行新配置时,都会将其添加到数据包中,如下所示:Chef infra 在EncryptedDataBagItems上循环,从特定索引开始或在Chef中没有特定对象,chef-infra,Chef Infra,我目前有一个包含一些秘密配置的数据包。每次进行新配置时,都会将其添加到数据包中,如下所示: { "id": "config-databag", "config1": { "name": "config1", "secret": "supersecretpassword" }, "config2": { "name": "config2", "secret": "supersecretpassword"
{
"id": "config-databag",
"config1": {
"name": "config1",
"secret": "supersecretpassword"
},
"config2": {
"name": "config2",
"secret": "supersecretpassword"
}
}
在我的配方中,我检索数据包并使用一个模板,该模板将使用部分模板将所有配置呈现到一个文件中:
secret_key = Chef::EncryptedDataBagItem.load_secret('/path/to/data_bag_key');
configurations = Chef::EncryptedDataBagItem.load('my-databag', 'config-databag', secret_key).to_hash
template 'file' do
source 'file.erb'
owner 'root'
group 'root'
mode '644'
variables(
'configurations' => configurations
)
notifies :restart, 'service[foo]'
end
file.erb
<% @configurations.each do |config| %>
<%= render 'append-config.erb', :variables => { :name => config[name], :secret => config[secret] } %>
<% end %>
{:name=>config[name],:secret=>config[secret]}%>
append-config.erb
special config <%= @name %> : <%= @secret %>
特殊配置:
是否有一种方法可以循环遍历数据库中除“id”对象之外的所有数据项?我目前正在Ubuntu 14.04上使用Chef的11.8.2版。您可以使用每对迭代器,您可以使用
next
跳过id
,或者在传递到变量之前删除它(delete\u if
方法)
现在它可以走两条路
hash.each_pair do |key, value|
next if key == "id"
puts key
puts value["name"]
puts value["secret"]
end
或
这比使用if语句检查值是否为字符串要好得多。非常感谢。
hash.each_pair do |key, value|
next if key == "id"
puts key
puts value["name"]
puts value["secret"]
end
hash.delete_if { |key, _| key == "id" }
hash.each_pair do |key, value|
puts key
puts value["name"]
puts value["secret"]
end