2014-12-08 2 views
4

У меня есть несколько машин ubuntu, которые мне нужно настроить одинаково, поэтому я использую повара-шеф-повара против поваренных книг поваров в общем каталоге, смонтированном только для чтения, чтобы выполнить это. Я использую шеф-повара более года, начиная с шеф-повара версии 10. Сегодня, после восстановления виртуальных машин с использованием упаковщика (я использую виртуальные машины для тестирования моих кулинарных книг, прежде чем использовать их на «настоящих» машинах, и периодически их перестраивать так что есть «свежие») мои поваренные книги начали неудачу с ошибкой:chef-solo run get metadata error после обновления до 12.0.0

ERROR: Cookbook loaded at path(s) [/chef/cookbooks/ack-grep] has invalid metadata: The `name' attribute is required in cookbook metadata 

Я использовал эти поваренные книги много раз на нескольких машинах, проверили их несколько раз в виртуальных машинах, но я заметил, что он установил недавно перестроен В.М. шеф-повар 12.0.0. Более старая VM работает шеф-повар 11 все еще отлично работает. Это справедливо для каждой из моих кулинарных книг.

Я начал исследовать и исследовать эту проблему с помощью google, и все, что я нашел по этому вопросу, сказал, чтобы поместить запись «name» в файл metadata.rb. Но мои файлы metadata.rb уже содержат запись «имя». Например, вот мой файл метаданных (под редакцией не взрывать свою личную информацию все в Google-умелым форуме):

---- Begin metadata.rb --------- 

name    'ack-grep' 
maintainer  'me' 
maintainer_email '[email protected]' 
license   'All Rights Reserved' 
description  'Installs/Configures ack-grep' 
long_description IO.read(File.join(File.dirname(__FILE__), 'README.md')) 
version   '0.1.0' 

------ End metadata.rb ------- 

Единственный рецепт, который находится в этой кулинарной книге очень просто:

------ Begin default.rb -------

# 
# Cookbook Name:: ack-grep 
# Recipe:: default 

package 'ack-grep' do 
    action :install 
end 

------ End default.rb -------

Одна статья, что я прочитал в ходе исследований, сказал создавая metadata.json файл поможет, так что я выполнил команду:

knife cookbook metadata ack-grep

Эта команда создала metadata.json файл, в котором содержится аналогичное поле «имя» с ту же информацию, что и файл metadata.rb, а также много другой информации, все в формате json. Но запуск одной и той же команды chef-solo снова привел к тому же сообщению об ошибке.

Я предполагаю, что, поскольку он жалуется на недостающее поле в метаданных, которое существует как в файлах metadata.rb, так и в файлах metadata.json, я пропускаю что-то еще, а сообщение об ошибке неверно. У кого-нибудь есть лучшая информация, чем эта, или знаете, что происходит? Может быть, даже как обойти/исправить?

+0

Привет, вы можете открыть файл metadata.rb в Vim и проверить для любой неотрицательной печатать символы? http://stupidunixlinuxtricks.blogspot.com/2008/03/show-non-printable-characters-in-vi.html – Irving

+0

Также проверьте, что синхронизация файлов работает. В общем, вы не хотите иметь метаданные.json в папке во время работы, поэтому я бы рекомендовал удалить это. – coderanger

+0

Ирвинг, я сделал то, что вы предлагали, но, к сожалению, никаких непечатаемых символов, кроме строк новой строки, не было. Все пробелы были фактически пробелами. – RBWolf

ответ

0

Быстрое решение - указать более старую версию шеф-повара с опцией --bootstrap-version.

«нож соло (подготовить/начальной загрузки) пользователь @ хост -P пароль --bootstrap-версии 11.16.4-1»

+0

До сих пор я помещал это как ошибку в рефери главного шеф-повара github. Я также обнаружил, что проблема не возникает с помощью chef-client -z, поэтому я использую это как обход, хотя он намного медленнее. Спасибо за помощь. – RBWolf

Смежные вопросы