Test Kitchen — интегрированная среда тестирования от Chef. Он позволяет писать тестовые рецепты, которые будут запускаться на виртуальных машинах после их создания и конвергенции с использованием кулинарной книги. Тестовые рецепты запускаются на этой виртуальной машине и могут проверить, все ли работает как положено.
ChefSpec — это то, что имитирует только запуск Chef. Тестовая кухня загружает реальный узел и запускает на нем шеф-повара.
Шаг 1 — Установите тестовую кухню Ruby gem и тестовую кухню vagrant gem, чтобы тестовая кухня использовала vagrant для раскрутки теста.
$ gem install kitchen $ gem install kitchen-vagrant
Шаг 2 — Настройка тестовой кухни. Это можно сделать, создав файл .kitchen.yml в каталоге поваренной книги.
driver_plugin: vagrant driver_config: require_chef_omnibus: true platforms: - name: ubuntu-12.04 driver_config: box: opscode-ubuntu-12.04 box_url: https://opscode-vm.s3.amazonaws.com/vagrant/opscode_ ubuntu-12.04_provisionerless.box suites: - name: default run_list: - recipe[minitest-handler] - recipe[my_cookbook_test] attributes: { my_cookbook: { greeting: 'Ohai, Minitest!'} }
В приведенном выше коде одна часть определяет, что vagrant необходимо раскрутить виртуальные машины, и определяет, что вы хотите, чтобы Omnibus установил Chef на целевой узел.
Вторая часть определяет, на какой платформе вы хотите протестировать кулинарные книги. Бродяга всегда будет создавать и уничтожать новые экземпляры. Вам не нужно бояться побочных эффектов от бродячих виртуальных машин, которые вы раскручиваете с помощью файла Vagrant.
Тестовая кухня может рассматриваться как временная среда, которая помогает запускать и тестировать поваренные книги во временной среде, аналогичной производственной. При включенной тестовой кухне можно убедиться, что данный фрагмент кода работает, прежде чем он будет фактически развернут в среде тестирования, подготовки и производства. Эта особенность тестовой кухни соблюдается многими организациями в качестве набора, прежде чем помещать поваренные книги в реальную рабочую среду.
Тест Кухня Рабочий процесс
Ниже приведены шаги, включенные в Test Kitchen Workflow.
Создание поваренной книги с помощью шеф-повара
Используйте следующий код для создания кулинарной книги.
$ chef generate cookbook motd_rhel Installing Cookbook Gems: Compiling Cookbooks... Recipe: code_generator::cookbook * directory[C:/chef/cookbooks/motd_rhel] action create - create new directory C:/chef/cookbooks/motd_rhel * template[C:/chef/cookbooks/motd_rhel/metadata.rb] action create_if_missing - create new file C:/chef/cookbooks/motd_rhel/metadata.rb - update content in file C:/chef/cookbooks/motd_rhel/metadata.rb from none to d6fcc2 (diff output suppressed by config) * template[C:/chef/cookbooks/motd_rhel/README.md] action create_if_missing - create new file C:/chef/cookbooks/motd_rhel/README.md - update content in file C:/chef/cookbooks/motd_rhel/README.md from none to 50deab (diff output suppressed by config) * cookbook_file[C:/chef/cookbooks/motd_rhel/chefignore] action create - create new file C:/chef/cookbooks/motd_rhel/chefignore - update content in file C:/chef/cookbooks/motd_rhel/chefignore from none to 15fac5 (diff output suppressed by config) * cookbook_file[C:/chef/cookbooks/motd_rhel/Berksfile] action create_if_missing - create new file C:/chef/cookbooks/motd_rhel/Berksfile - update content in file C:/chef/cookbooks/motd_rhel/Berksfile from none to 9f08dc (diff output suppressed by config) * template[C:/chef/cookbooks/motd_rhel/.kitchen.yml] action create_if_missing - create new file C:/chef/cookbooks/motd_rhel/.kitchen.yml - update content in file C:/chef/cookbooks/motd_rhel/.kitchen.yml from none to 49b92b (diff output suppressed by config) * directory[C:/chef/cookbooks/motd_rhel/test/integration/default/serverspec] action create - create new directory C:/chef/cookbooks/motd_rhel/test/integration/default/serverspec * directory[C:/chef/cookbooks/motd_rhel/test/integration/helpers/serverspec] action create - create new directory C:/chef/cookbooks/motd_rhel/test/integration/helpers/serverspec * cookbook_file [C:/chef/cookbooks/motd_rhel/test/integration/helpers/serverspec/spec_helper.rb] action create_if_missing - create new file C:/chef/cookbooks/motd_rhel/test/integration/helpers/serverspec/spec_helper.rb - update content in file C:/chef/cookbooks/motd_rhel/test/integration/helpers/serverspec/spec_helper.rb from none to d85df4 (diff output suppressed by config) * template [C:/chef/cookbooks/motd_rhel/test/integration/default/serverspec/defaul t_spec.rb] action create_if_missing - create new file C:/chef/cookbooks/motd_rhel/test/integration/default/serverspec/default_spec.rb - update content in file C:/chef/cookbooks/motd_rhel/test/integration/default/serverspec/default_spec.rb from none to 3fbdbd (diff output suppressed by config) * directory[C:/chef/cookbooks/motd_rhel/spec/unit/recipes] action create - create new directory C:/chef/cookbooks/motd_rhel/spec/unit/recipes * cookbook_file [C:/chef/cookbooks/motd_rhel/spec/spec_helper.rb] action create_if_missing - create new file C:/chef/cookbooks/motd_rhel/spec/spec_helper.rb - update content in file C:/chef/cookbooks/motd_rhel/spec/spec_helper.rb from none to 587075 (diff output suppressed by config) * template [C:/chef/cookbooks/motd_rhel/spec/unit/recipes/default_spec.rb] action create_if_missing - create new file C:/chef/cookbooks/motd_rhel/spec/unit/recipes/default_spec.rb - update content in file C:/chef/cookbooks/motd_rhel/spec/unit/recipes/default_spec.rb from none to ff3b17 (diff output suppressed by config) * directory[C:/chef/cookbooks/motd_rhel/recipes] action create - create new directory C:/chef/cookbooks/motd_rhel/recipes * template[C:/chef/cookbooks/motd_rhel/recipes/default.rb] action create_if_missing - create new file C:/chef/cookbooks/motd_rhel/recipes/default.rb - update content in file C:/chef/cookbooks/motd_rhel/recipes/default.rb from none to c4b029 (diff output suppressed by config) * execute[initialize-git] action run - execute git init . * cookbook_file[C:/chef/cookbooks/motd_rhel/.gitignore] action create - create new file C:/chef/cookbooks/motd_rhel/.gitignore - update content in file C:/chef/cookbooks/motd_rhel/.gitignore from none to 33d469 (diff output suppressed by config) * execute[git-add-new-files] action run - execute git add . * execute[git-commit-new-files] action run - execute git commit -m "Add generated cookbook content"
Ниже приведена структура созданной поваренной книги в качестве результата вышеприведенного кода.
Тестовый файл конфигурации кухни
Файл .kitchen.yaml
driver: name: vagrant provisioner: name: chef_zero # verifier: # name: inspec # format: doc platforms: - name: ubuntu-14.04 suites: - name: default run_list: - recipe[motd_rhel::default] attributes:
Драйверы — определяет программное обеспечение, которое управляет машиной.
Provisioner — содержит спецификацию работы Chef. Мы используем chef_zero, потому что он позволяет имитировать среду сервера Chef на локальной машине. Это позволяет работать с атрибутами узла и спецификациями сервера Chef.
Платформа — указывает целевую операционную систему.
Наборы — это определяет, что вы хотите применить в виртуальной среде. Здесь вы определяете множественное определение. Это место, где вы определяете список выполнения, в котором указывается, какой рецепт запускать и в какой последовательности нам нужно запускать.
Выполнение команд в последовательности
Список кухонь
$ kitchen list Instance Driver Provisioner Verifier Transport Last Action ubuntu-1404 Vagrant ChefZero Busser Ssh <Not Created>
Кухня Создать
$ kitchen create -----> Starting Kitchen (v1.4.2) -----> Creating <default-centos-72>... Bringing machine 'default' up with 'virtualbox' provider... ==> default: Box 'opscode-centos-7.2' could not be found. Attempting to find and install... default: Box Provider: virtualbox default: Box Version: >= 0 ==> default: Box file was not detected as metadata. Adding it directly... ==> default: Adding box 'opscode-centos-7.2' (v0) for provider: virtualbox default: Downloading: https://opscode-vmbento.s3.amazonaws.com/vagrant/virtualbox/ opscode_centos-7.1_chefprovisionerless.box[...] Vagrant instance <default-centos-72> created. Finished creating <default-centos-72> (3m12.01s). -----> Kitchen is finished. (3m12.60s)
Кухня сходится
$ kitchen converge -----> Converging <default-centos-72>... Preparing files for transfer Preparing dna.json Resolving cookbook dependencies with Berkshelf 4.0.1... Removing non-cookbook files before transfer Preparing validation.pem Preparing client.rb -----> Chef Omnibus installation detected (install only if missing) Transferring files to <default-centos-72> Starting Chef Client, version 12.6.0 resolving cookbooks for run list: ["motd_rhel::default"] Synchronizing Cookbooks: - motd_rhel (0.1.0) Compiling Cookbooks... Converging 1 resources Recipe: motd_rhel::default (up to date) Running handlers: Running handlers complete Chef Client finished, 0/1 resources updated in 01 seconds Finished converging <default-centos-72> (0m3.57s). -----> Kitchen is finished. (0m4.55s)
Настройка тестирования
Кухонный логин используется для проверки правильности подготовки тестовой виртуальной машины.