Chef infra 致命:命名错误:未定义的方法“无法访问”烹饪书和x27;零级:零级

Chef infra 致命:命名错误:未定义的方法“无法访问”烹饪书和x27;零级:零级,chef-infra,chef-recipe,berkshelf,berksfile,Chef Infra,Chef Recipe,Berkshelf,Berksfile,我是厨师的新手,开始使用用户库编写一个简单的食谱。我的伯克斯档案: name@name:~/chef-repo$ cat Berksfile site :opscode cookbook "users" 然后我跑: berks install 还有我的食谱: name@name:~/chef-repo$ ls cookbooks/ users 最后,我的食谱: name@name:~/chef-repo$ cat blah-users.rb include_recipe "users"

我是厨师的新手,开始使用用户库编写一个简单的食谱。我的伯克斯档案:

name@name:~/chef-repo$ cat Berksfile
site :opscode

cookbook "users"
然后我跑:

berks install
还有我的食谱:

name@name:~/chef-repo$ ls cookbooks/
users
最后,我的食谱:

name@name:~/chef-repo$ cat blah-users.rb 
include_recipe "users"

users_manage "blah-dev" do
  group_id 1001
  action [ :remove, :create ]
end
当我应用时,我得到一个错误:

name@name:~/chef-repo$ chef-apply blah-users.rb 
[2015-05-04T09:05:48-04:00] FATAL: Stacktrace dumped to /home/name/.chef/cache/chef-stacktrace.out
[2015-05-04T09:05:48-04:00] FATAL: NoMethodError: undefined method `unreachable_cookbook?' for nil:NilClass
我相当肯定,包括“用户”在内的配方是问题所在(至少是第一个问题)。我还发现这行Stacktrace转储到/home/name/.chef/cache/chef-Stacktrace.out很有趣,因为该位置没有文件

我试过有无sudo。所以我不认为这是一个权限问题

我正在运行chef server 12.3的本地安装,看起来运行良好

谢谢


~/chef repo$sudo chef apply blah-users.rb-l debug
[2015-05-04T13:17:50-04:00]调试:为tbrown构建节点对象
[2015-05-04T13:17:50-04:00]调试:从命令行提供的JSON属性中提取运行列表
[2015-05-04T13:17:50-04:00]调试:从json文件应用属性
[2015-05-04T13:17:50-04:00]调试:平台是ubuntu版本14.04
[2015-05-04T13:17:50-04:00]信息:运行列表为[]
[2015-05-04T13:17:50-04:00]信息:运行列表扩展为[]
[2015-05-04T13:17:50-04:00]调试:通过include_Recipe加载配方用户
[2015-05-04T13:17:50-04:00]致命:Stacktrace转储到/var/chef/cache/chef-Stacktrace.out
[2015-05-04T13:17:50-04:00]调试:命名错误:nil:NilClass的未定义方法“unreachable_cookbook”
/opt/chefdk/embedded/apps/chef/lib/chef/run_context.rb:257:in'unreachable_cookbook'
/opt/chefdk/embedded/apps/chef/lib/chef/run_context.rb:155:in'load_recipe'
/opt/chefdk/embedded/apps/chef/lib/chef/run_context.rb:142:in“block in include_recipe”
/opt/chefdk/embedded/apps/chef/lib/chef/run_context.rb:141:在'each'中
/opt/chefdk/embedded/apps/chef/lib/chef/run_context.rb:141:in'include_recipe'
/opt/chefdk/embedded/apps/chef/lib/chef/dsl/include_recipe.rb:26:in'include_recipe'
废话用户。rb:1:run\u chef\u recipe中的
/opt/chefdk/embedded/apps/chef/lib/chef/application/apply.rb:168:in'instance_eval'
/opt/chefdk/embedded/apps/chef/lib/chef/application/apply.rb:168:in'run\u chef\u recipe'
/opt/chefdk/embedded/apps/chef/lib/chef/application/apply.rb:180:在“运行应用程序”中
/opt/chefdk/embedded/apps/chef/lib/chef/application/apply.rb:193:in'run'
/opt/chefdk/embedded/apps/chef/bin/chef应用:25:in`'
/usr/bin/chef申请:51:在“加载”中
/usr/bin/chef申请:51:in`'
[2015-05-04T13:17:50-04:00]致命:命名错误:未定义nil:NilClass的“无法访问的烹饪书”方法
评论后:

在某处使用
include_recipe
时,必须加载承载此食谱的食谱,有两种方法可以加载:

  • 把它放在运行列表中
  • 在食谱的
    metadata.rb
    文件中使用
    取决于“食谱”,“版本限制”
    ,包括其他()
  • 这里使用
    chef apply
    我们运行一个特定的菜谱,而不是运行列表,因此1不适用,2不适用,没有要加载的菜谱,只有一个菜谱<代码>厨师应用旨在使用内部厨师资源,而不是LWRP

    使用multiples cookbooks的方法是创建一个cookbook,并在其
    metadata.rb
    文件中有一个depend指令

    之后,您可以使用
    chef solo
    chef zero
    在命令行上使用'
    -r
    -o
    指定运行列表来运行本食谱,这将允许加载所有需要的食谱,并使所依赖的食谱中的LWRP可用


    关于chef客户端模式(solo和zero只是快捷方式)的更多扩展文档可用

    我已经找到了这个问题的根源。 Chef apply不会通过load方法()在运行上下文对象中实例化cookbook_编译器变量。因此,此行上的编译器对象为nil。在我看来,编译器需要初始化

    我在这里开了一张票:

    您可以尝试使用
    chef apply blah-users.rb-l debug
    。我完全不确定chef apply是否可以与依赖项一起使用(即需要另一本食谱中的配方),因为它仅用于运行一小部分内部资源,并且没有食谱加载(因此没有读取
    metadata.rb
    ,因为没有)。我能想到的最好的解决方法是使用chef solo或chef zero(参见EXCENTED信息)与一本在其
    metadata.rb
    文件中具有正确依赖关系的食谱。metadata.rb需要一个“依赖于”的“用户”食谱。您可能希望将其作为一个答案添加(并接受它),以便以后如果有人偶然发现这一点,他们很容易找到答案。我将在评论中提到答案。我想给你一个机会,让这个答案正式化,如果是,我会接受,否则我会自己添加。如果你能等到明天,我会写一个正确的答案,我在家打电话,链接到文档是很可怕的:)@akaphenom如果我遗漏了什么,请随时发表评论,我将根据需要进行编辑。当然,我需要将菜谱放入烹饪书,将菜谱和相关菜谱上传到厨师服务器,然后通过元数据中的depends引用菜谱。rb我怀疑我的耐心是我需要努力的。我受不了一页页的“hello world”教程。非常感谢。
    ~/chef-repo$ sudo chef-apply blah-users.rb -l debug
    
    [2015-05-04T13:17:50-04:00] DEBUG: Building node object for tbrown
    [2015-05-04T13:17:50-04:00] DEBUG: Extracting run list from JSON attributes provided on command line
    [2015-05-04T13:17:50-04:00] DEBUG: Applying attributes from json file
    [2015-05-04T13:17:50-04:00] DEBUG: Platform is ubuntu version 14.04
    [2015-05-04T13:17:50-04:00] INFO: Run List is []
    [2015-05-04T13:17:50-04:00] INFO: Run List expands to []
    [2015-05-04T13:17:50-04:00] DEBUG: Loading Recipe users via include_recipe
    [2015-05-04T13:17:50-04:00] FATAL: Stacktrace dumped to /var/chef/cache/chef-stacktrace.out
    [2015-05-04T13:17:50-04:00] DEBUG: NoMethodError: undefined method `unreachable_cookbook?' for nil:NilClass
    /opt/chefdk/embedded/apps/chef/lib/chef/run_context.rb:257:in `unreachable_cookbook?'
    /opt/chefdk/embedded/apps/chef/lib/chef/run_context.rb:155:in `load_recipe'
    /opt/chefdk/embedded/apps/chef/lib/chef/run_context.rb:142:in `block in include_recipe'
    /opt/chefdk/embedded/apps/chef/lib/chef/run_context.rb:141:in `each'
    /opt/chefdk/embedded/apps/chef/lib/chef/run_context.rb:141:in `include_recipe'
    /opt/chefdk/embedded/apps/chef/lib/chef/dsl/include_recipe.rb:26:in `include_recipe'
    blah-users.rb:1:in `run_chef_recipe'
    /opt/chefdk/embedded/apps/chef/lib/chef/application/apply.rb:168:in `instance_eval'
    /opt/chefdk/embedded/apps/chef/lib/chef/application/apply.rb:168:in `run_chef_recipe'
    /opt/chefdk/embedded/apps/chef/lib/chef/application/apply.rb:180:in `run_application'
    /opt/chefdk/embedded/apps/chef/lib/chef/application/apply.rb:193:in `run'
    /opt/chefdk/embedded/apps/chef/bin/chef-apply:25:in `<top (required)>'
    /usr/bin/chef-apply:51:in `load'
    /usr/bin/chef-apply:51:in `<main>'
    [2015-05-04T13:17:50-04:00] FATAL: NoMethodError: undefined method `unreachable_cookbook?' for nil:NilClass