FATAL: NoMethodError: неопределенный метод `unreachable_cookbook?' для ноля:NilClass

Я новичок в шеф-повара и начал писать простой рецепт, используя библиотеку пользователей. Мой 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"

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

Я совершенно уверен, что проблема заключается в "пользователи" include_recipe (по крайней мере, первый). Я также нахожу эту строку Stacktrace, выгруженной в /home/name/.chef/cache/chef-stacktrace.out, интересной, поскольку в этом месте нет файла.

Я пытался с и без судо. Так что я не думаю, что это проблема с разрешениями.

Я запускаю локальную установку Chef Server 12.3, которая выглядит нормально работает...

Спасибо


~/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

2 ответа

Решение

После комментариев:

Когда используешь include_recipe где-то, поваренная книга, содержащая этот рецепт, должна быть загружена, есть два способа загрузить это:

  1. Имейте это в списке выполнения
  2. использование depends "cookbook", "version limitation" в metadata.rb файл поваренной книги, включая другой ( Документация)

Здесь с помощью chef-apply мы запускаем конкретный рецепт, а не список выполнения, поэтому 1 не применяется, а 2 не может применяться, нет поваренной книги для загрузки, только рецепт. Chef-apply направлены на использование внутренних ресурсов шеф-повара, а не LWRP.

Способ использовать несколько поваренных книг состоит в том, чтобы создать поваренную книгу и иметь директиву зависимость от нее. metadata.rb файл.

После этого вы можете запустить эту кулинарную книгу с chef-solo или же chef-zero указание списка запуска в командной строке с помощью '-r или же -oэто позволит загрузить все необходимые поваренные книги и сделает доступным LWRP из зависимых поваренных книг.

Более расширенная документация о режимах chef-client (соло и ноль - просто ярлыки) доступна здесь

Я нашел источник этой проблемы. Chef apply не создает экземпляр переменной cookbook_compiler в объекте контекста выполнения с помощью метода load ( https://github.com/chef/chef/blob/master/lib/chef/run_context.rb#L157). Поэтому объект компилятора в этой строке https://github.com/chef/chef/blob/master/lib/chef/run_context.rb#L469 имеет значение nil. Мне кажется, что компилятор нужно будет инициализировать.

Открыли билет здесь: https://github.com/chef/chef/issues/3914

Другие вопросы по тегам