Какова цель файла.kitchen.yml в корне проекта, сгенерированного 'chef generate app'?
У меня есть старое репо поваренных книг, предназначенное для создания полноценной среды разработки с Vagrant. Я хочу "рефакторинг" в соответствии с лучшими практиками. Я хочу разделить большие кулинарные книги, создать правильные кулинарные книги сообщества поваренных книг и добавить тесты InSpec, запускаемые Testkitchen, чтобы проверить, что все установлено так, как должно быть.
Я решил начать с нуля и посмотреть, какой скелет будет создан, выполнив chef generate app some_name
, Эта команда создает следующий набор файлов:
.
|-- .gitignore
|-- .kitchen.yml <----------
|-- README.md
|-- cookbooks
| `-- some_name
| |-- Berksfile
| |-- chefignore
| |-- metadata.rb
| |-- recipes
| | `-- default.rb
| `-- spec
| |-- spec_helper.rb
| `-- unit
| `-- recipes
| `-- default_spec.rb
`-- test
`-- smoke
`-- default
`-- default_test.rb
Я заметил .kitchen.yml
создано в корне. Поскольку сейчас рекомендуется создавать одно репозиторий VCS для каждой кулинарной книги, мне показалось немного странным иметь .kitchen.yml
в корне. Но, с другой стороны, может быть хорошей идеей сохранить конфигурацию виртуальной машины для тестирования всех моих поваренных книг и наборов тестов в одном корневом файле.
Тогда я решил проверить, смогу ли я запустить тесты всех поваренных книг проекта из корня .kitchen.yml
, Я сделал простую поваренную книгу для установки Java, с depends 'java'
в кулинарной книге metadata.rb
и подготовленный корень .kitchen.yml
,
Проблема с которой я столкнулся kitchen test
из корня это что поваренная книга сообщества java
не разрешено на выполнение кухонных испытаний. Я пытался добавить Barksfile
в каталог поваренной книги и это не помогло (пока неизвестно java
зависимость). Похоже, кухня работает только с Berksfile относительно .kitchen.yml
, Затем я попытался добавить Berksfile
в корне проекта и, конечно, он не работал, потому что он также ищет metadata.rb
в корневом каталоге.
Похоже, не очень хорошая идея иметь .kitchen.yml
для всех кулинарных книг в корне проекта. Почему это генерируется тогда? Мне тоже не нравится, что мне придется писать почти то же самое .kitchen.yml
в каталоге каждой кулинарной книги, но, похоже, у меня нет выбора, если я хочу разрешить зависимости от metadata.rb
,
Было бы неплохо, если бы вы также предложили мне хороший пример репозитория, в котором реализованы лучшие практики обертки / ролей-поваренных книг + тестирования. Мой проект достаточно прост: он просто создает некоторых пользователей, подготавливает среду и устанавливает множество сервисов, в основном, используя готовые кулинарные книги сообщества. Я хочу держать его в одном репо и тестировать с Kitchen + InSpec
1 ответ
app
Это гибрид многорепого и монорепо дизайна, поэтому в этой структуре вы будете хранить все свои местные кулинарные книги в одном репо и извлекать внешние вещи по мере необходимости. Идея root kitchen.yml состоит в том, чтобы иметь место для проведения тестов верхнего уровня для приложения в целом. Обычно это означает тестирование политик, а не кулинарных книг, см. Примеры https://github.com/poise/yolover-example.
Что касается проблем с разрешением поваренной книги, вам, вероятно, нужен корневой Berksfile, если не используются политики, хотя это может быть просто:
source 'https://supermarket.chef.io/'
source chef_repo: '.'
cookbook 'whatever'
это app
Стиль был своего рода экспериментом и, вероятно, нуждается в доработке / обновлении по мере старения.