Как запустить шеф-повара без сервера шеф-повара (повар-соло/шеф-ноль)

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

У меня есть папка chef-repo с моими кулинарными книгами, и я следил за шаги в этой статье.

PS C:\Temp\chef-repo> tree .
Folder PATH listing
Volume serial number is 3E77-463C
C:\TEMP\CHEF-REPO
└───cookbooks
    └───test
        └───recipes
PS C:\Temp\chef-repo> cat .\cookbooks\test\recipes\default.rb
file "C:\Temp\test.log" do
  content 'HELLO WORLD'
end

Однако, когда я запускаю chef-client -z -o test, похоже, он не может найти мои поваренные книги.

Это ошибка, которую я получаю:

Starting Chef Client, version 11.16.0
[2014-09-25T10:17:37-05:00] WARN: Run List override has been provided.
[2014-09-25T10:17:37-05:00] WARN: Original Run List: []
[2014-09-25T10:17:37-05:00] WARN: Overridden Run List: [recipe[test]]
resolving cookbooks for run list: ["test"]

================================================================================
Error Resolving Cookbooks for Run List:
================================================================================

Missing Cookbooks:
------------------
No such cookbook: test

Expanded Run List:
------------------
* test


Running handlers:
[2014-09-25T10:17:37-05:00] ERROR: Running exception handlers
Running handlers complete
[2014-09-25T10:17:37-05:00] ERROR: Exception handlers complete
[2014-09-25T10:17:37-05:00] FATAL: Stacktrace dumped to C:/Users/username/.chef/local-mode-cache/cache/chef-stacktrace.out
Chef Client failed. 0 resources updated in 25.375311 seconds
[2014-09-25T10:17:38-05:00] FATAL: Net::HTTPServerException: 412 "Precondition Failed "

Я запускаю эту команду из C:\Temp\chef-repo, который является корнем папки репозитория моего шеф-повара. Я также попытался изменить свой %USERPROFILE%\.chef\knife.rb, чтобы он содержал следующие настройки:

cookbook_path [
  "C:\Temp\chef-repo\cookbooks"
]
local_mode true
node_name "Chef.example.com"

Что я делаю неправильно?


person Mike Robinet    schedule 25.09.2014    source источник


Ответы (2)


Что происходит не так, так это то, что ваш conf указывает

cookbook_path [
  "C:\Temp\chef-repo\cookbooks"
]

который, вероятно, будет интерпретирован рубином как C:Tempchef-repocookbooks при загрузке ножа.rb замените \ на / или удвойте их \\

Нож.rb — это файл ruby, который анализируется как код ruby.

Как и во многих языках программирования, \ используется для экранирования следующего символа.

Изменить для точности:

Всегда используйте косую черту, вы избежите ошибок, а шеф-повар позаботится о замене их правильно экранированной обратной косой чертой, когда это необходимо в командах копирования и т. д.

Единственное место, где вы будете использовать обратную косую черту, - это пакетный ресурс с синтаксисом heredoc, и, возможно, вам все равно придется их избегать (не уверен в необходимости экранирования)

person Tensibai    schedule 26.09.2014
comment
Ах, как просто! Спасибо. - person Mike Robinet; 26.09.2014

Это не дает точного ответа на ваш вопрос... Я обошел это, заставив разработчиков использовать бродячую виртуальную машину, которая находится в "бродячей" среде шеф-повара, которая точно соответствует run_list(s) среды dev/qa/prod с некоторыми незначительные исключения. Каждый из них имеет одно и то же имя узла, что касается сервера шеф-повара, что позволяет избежать необходимости регистрировать каждую машину.

person Mark Lüntzel    schedule 26.09.2014
comment
Спасибо за предложение. В любом случае есть о чем подумать, но очень хочется надеяться на бессерверное решение, чтобы рецепты шеф-повара можно было доставлять как часть сборки вместе с другими артефактами сборки и просто выполнять как часть развертывания. - person Mike Robinet; 26.09.2014