Rav*_*mar 4 ruby-on-rails cookbook chef-infra
我创建了以下数据包项目:
{
"name": "data_bag_item_nameservers_servers",
"json_class": "Chef::DataBagItem",
"chef_type": "data_bag_item",
"data_bag": "nameservers",
"raw_data": {
"id": "servers",
"serverslist": [
"xxx.xxx.xxx.xxx",
"xxx.xxx.xxx.xxx"
]
}
}
Run Code Online (Sandbox Code Playgroud)
在模板erb中我添加了以下调用,
<% @serverslist.each_with_index do |nmserver| %>
nameserver <%= nmserver %>
<% end %>
Run Code Online (Sandbox Code Playgroud)
但它不适合我,并给出错误,因为,
在资源'template [/etc/resolve.conf]上执行操作创建时出错
厨师::密新::模板:: TemplateError
undefined方法each_with_index'为nil:NilClass
有人可以帮助我如何在食谱食谱中调用这些数据包项值?
提前致谢!
您是否考虑过使用节点属性的更简单选项?
在运行时,很容易超越cookbook默认设置.我指出这一点,因为在我的经验中很少需要数据包.
我有两个例子.
"演示"食谱
??? attributes
? ??? default.rb
??? Berksfile
??? Berksfile.lock
??? chefignore
??? metadata.rb
??? README.md
??? recipes
? ??? default.rb
??? templates
? ??? default
? ??? dummy.erb
??? test
??? integration
??? default
? ??? serverspec
? ??? default_spec.rb
??? helpers
??? serverspec
??? spec_helper.rb
Run Code Online (Sandbox Code Playgroud)
default['demo']['nameservers']['one'] = "one"
default['demo']['nameservers']['two'] = "two"
default['demo']['nameservers']['three'] = "three"
Run Code Online (Sandbox Code Playgroud)
template "/etc/dummy" do
source "dummy.erb"
owner 'root'
group 'root'
mode '0644'
end
Run Code Online (Sandbox Code Playgroud)
<% node['demo']['nameservers'].each do |name,server| %>
nameserver <%= server %>
<% end %>
Run Code Online (Sandbox Code Playgroud)
require 'spec_helper'
describe file('/etc/dummy') do
it { should be_file }
it { should be_owned_by 'root' }
it { should contain 'nameserver one' }
it { should contain 'nameserver two' }
it { should contain 'nameserver three' }
end
Run Code Online (Sandbox Code Playgroud)
测试/集成目录下带有测试数据包的"演示"食谱
??? Berksfile
??? Berksfile.lock
??? chefignore
??? metadata.rb
??? README.md
??? recipes
? ??? default.rb
??? templates
? ??? default
? ??? dummy.erb
??? test
??? integration
??? data_bags
? ??? stuff
? ??? nameservers.json
??? default
? ??? serverspec
? ??? default_spec.rb
??? helpers
??? serverspec
??? spec_helper.rb
Run Code Online (Sandbox Code Playgroud)
样本数据
{
"id": "nameservers",
"list": [
"one",
"two",
"three"
]
}
Run Code Online (Sandbox Code Playgroud)
配方现在更加复杂.必须显式检索数据包中的数据,然后将其作为变量传递到模板中
nameservers = data_bag_item('stuff', "nameservers")
template "/etc/dummy" do
source "dummy.erb"
owner 'root'
group 'root'
mode '0644'
variables ({
"servers" => nameservers["list"]
})
end
Run Code Online (Sandbox Code Playgroud)
<% @servers.each do |server| %>
nameserver <%= server %>
<% end %>
Run Code Online (Sandbox Code Playgroud)
require 'spec_helper'
describe file('/etc/dummy') do
it { should be_file }
it { should be_owned_by 'root' }
it { should contain 'nameserver one' }
it { should contain 'nameserver two' }
it { should contain 'nameserver three' }
end
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5177 次 |
| 最近记录: |