Chef infra 厨师:在不同的食谱中使用属性
我试图使用一本烹饪书中定义的属性,比如foo,另一本烹饪书中定义的属性,比如bar。我得到错误“nil:NilClass的未定义方法”[]” 以上是我厨师的结构 solo.rbChef infra 厨师:在不同的食谱中使用属性,chef-infra,chef-solo,Chef Infra,Chef Solo,我试图使用一本烹饪书中定义的属性,比如foo,另一本烹饪书中定义的属性,比如bar。我得到错误“nil:NilClass的未定义方法”[]” 以上是我厨师的结构 solo.rb cookbook_path File.expand_path("../chef/cookbooks", __FILE__) json_attribs File.expand_path("../chef/roles/roles.json", __FILE__) log_location STDOUT log_level :
cookbook_path File.expand_path("../chef/cookbooks", __FILE__)
json_attribs File.expand_path("../chef/roles/roles.json", __FILE__)
log_location STDOUT
log_level :debug
default['foo']['var1'] = "Hello"
default['bar']['var1'] = node['foo']['var1']
name 'foo'
depends 'bar'
name 'bar'
depends 'foo'
default['foo']['var1'] = "Hello"
default['bar']['var1'] = node['foo']['var1']
log "The value of ['bar']['var1'] is #{node['bar']['var1']}. The value of ['foo']['var1'] is also #{node['foo']['var1']}"
name 'bar'
depends 'foo'
roles.json
{
"run_list": ["recipe[foo::default]"]
}
foo/attributes/default.rb
cookbook_path File.expand_path("../chef/cookbooks", __FILE__)
json_attribs File.expand_path("../chef/roles/roles.json", __FILE__)
log_location STDOUT
log_level :debug
default['foo']['var1'] = "Hello"
default['bar']['var1'] = node['foo']['var1']
name 'foo'
depends 'bar'
name 'bar'
depends 'foo'
default['foo']['var1'] = "Hello"
default['bar']['var1'] = node['foo']['var1']
log "The value of ['bar']['var1'] is #{node['bar']['var1']}. The value of ['foo']['var1'] is also #{node['foo']['var1']}"
name 'bar'
depends 'foo'
bar/attributes/default.rb
cookbook_path File.expand_path("../chef/cookbooks", __FILE__)
json_attribs File.expand_path("../chef/roles/roles.json", __FILE__)
log_location STDOUT
log_level :debug
default['foo']['var1'] = "Hello"
default['bar']['var1'] = node['foo']['var1']
name 'foo'
depends 'bar'
name 'bar'
depends 'foo'
default['foo']['var1'] = "Hello"
default['bar']['var1'] = node['foo']['var1']
log "The value of ['bar']['var1'] is #{node['bar']['var1']}. The value of ['foo']['var1'] is also #{node['foo']['var1']}"
name 'bar'
depends 'foo'
foo/metadata.rb
cookbook_path File.expand_path("../chef/cookbooks", __FILE__)
json_attribs File.expand_path("../chef/roles/roles.json", __FILE__)
log_location STDOUT
log_level :debug
default['foo']['var1'] = "Hello"
default['bar']['var1'] = node['foo']['var1']
name 'foo'
depends 'bar'
name 'bar'
depends 'foo'
default['foo']['var1'] = "Hello"
default['bar']['var1'] = node['foo']['var1']
log "The value of ['bar']['var1'] is #{node['bar']['var1']}. The value of ['foo']['var1'] is also #{node['foo']['var1']}"
name 'bar'
depends 'foo'
当我运行查询chef solo-c solo.rb时,我得到如下错误
================================================================================
Recipe Compile Error in ../chef/cookbooks/bar/attributes/default.rb
================================================================================
NoMethodError
-------------
undefined method `[]' for nil:NilClass
Relevant File Content:
----------------------
Recipe Compile Error in ../chef/cookbooks/bar/attributes/default.rb:
1>> default['bar']['var1'] = node['foo']['var1']
这里foo
是我的应用程序,bar
是。如何导入属性???您已反转了cookbook依赖项。如果您想在bar cookbook中使用节点['foo']['var1']
属性,那么bar cookbook应该依赖于foo cookbook,而不是相反
在foo/metadata.rb中去掉依赖于的“bar”
,并创建bar/metadata.rb
cookbook_path File.expand_path("../chef/cookbooks", __FILE__)
json_attribs File.expand_path("../chef/roles/roles.json", __FILE__)
log_location STDOUT
log_level :debug
default['foo']['var1'] = "Hello"
default['bar']['var1'] = node['foo']['var1']
name 'foo'
depends 'bar'
name 'bar'
depends 'foo'
default['foo']['var1'] = "Hello"
default['bar']['var1'] = node['foo']['var1']
log "The value of ['bar']['var1'] is #{node['bar']['var1']}. The value of ['foo']['var1'] is also #{node['foo']['var1']}"
name 'bar'
depends 'foo'
完整示例:
|____cookbooks
| |____foo
| | |____attributes
| | | |____default.rb
| |____bar
| | |____recipes
| | | |____default.rb
| | |____attributes
| | | |____default.rb
| | |____metadata.rb
cookbooks/foo/attributes/default.rb
cookbook_path File.expand_path("../chef/cookbooks", __FILE__)
json_attribs File.expand_path("../chef/roles/roles.json", __FILE__)
log_location STDOUT
log_level :debug
default['foo']['var1'] = "Hello"
default['bar']['var1'] = node['foo']['var1']
name 'foo'
depends 'bar'
name 'bar'
depends 'foo'
default['foo']['var1'] = "Hello"
default['bar']['var1'] = node['foo']['var1']
log "The value of ['bar']['var1'] is #{node['bar']['var1']}. The value of ['foo']['var1'] is also #{node['foo']['var1']}"
name 'bar'
depends 'foo'
食谱/bar/attributes/default.rb
cookbook_path File.expand_path("../chef/cookbooks", __FILE__)
json_attribs File.expand_path("../chef/roles/roles.json", __FILE__)
log_location STDOUT
log_level :debug
default['foo']['var1'] = "Hello"
default['bar']['var1'] = node['foo']['var1']
name 'foo'
depends 'bar'
name 'bar'
depends 'foo'
default['foo']['var1'] = "Hello"
default['bar']['var1'] = node['foo']['var1']
log "The value of ['bar']['var1'] is #{node['bar']['var1']}. The value of ['foo']['var1'] is also #{node['foo']['var1']}"
name 'bar'
depends 'foo'
食谱/bar/recipes/default.rb
cookbook_path File.expand_path("../chef/cookbooks", __FILE__)
json_attribs File.expand_path("../chef/roles/roles.json", __FILE__)
log_location STDOUT
log_level :debug
default['foo']['var1'] = "Hello"
default['bar']['var1'] = node['foo']['var1']
name 'foo'
depends 'bar'
name 'bar'
depends 'foo'
default['foo']['var1'] = "Hello"
default['bar']['var1'] = node['foo']['var1']
log "The value of ['bar']['var1'] is #{node['bar']['var1']}. The value of ['foo']['var1'] is also #{node['foo']['var1']}"
name 'bar'
depends 'foo'
食谱/bar/metadata.rb
cookbook_path File.expand_path("../chef/cookbooks", __FILE__)
json_attribs File.expand_path("../chef/roles/roles.json", __FILE__)
log_location STDOUT
log_level :debug
default['foo']['var1'] = "Hello"
default['bar']['var1'] = node['foo']['var1']
name 'foo'
depends 'bar'
name 'bar'
depends 'foo'
default['foo']['var1'] = "Hello"
default['bar']['var1'] = node['foo']['var1']
log "The value of ['bar']['var1'] is #{node['bar']['var1']}. The value of ['foo']['var1'] is also #{node['foo']['var1']}"
name 'bar'
depends 'foo'
样本输出
# chef-client -z -o 'recipe[bar]'
...
resolving cookbooks for run list: ["bar"]
Synchronizing Cookbooks:
- foo (0.0.0)
- bar (0.0.0)
Compiling Cookbooks...
Converging 1 resources
Recipe: bar::default
* log[The value of ['bar']['var1'] is Hello. The value of ['foo']['var1'] is also Hello] action write
“Foo”是我的申请,“bar”是chef maven。我在“foo”中依赖maven(bar)。现在我尝试在关于foo的酒吧里添加依赖项,但错误仍然是一样的。你能给我们举个例子看看吗?或者是真正的烹饪书,或者只是foo和bar?增加了一个例子。老实说,我很难理解你想做什么。如果您使用的是Chef Maven cookbook,为什么要修改“Maven/attributes/default.rb”并将属性值设置为您自己的应用程序cookbook中的属性?