Тестовая кухня — это интегрированная среда тестирования от Chef. Это позволяет писать тесты, которые запускаются после того, как ВМ была создана и конвергирована с использованием кулинарной книги. Тесты выполняются на виртуальной машине и могут убедиться, что все работает как положено.
Это контракт узла с ChefSpec, который имитирует только запуск Chef. Test Kitchen загружает реальный узел и запускает на нем Chef.
Настройка
Для этого на машине должен быть установлен Vagrant, который помогает управлять виртуальной машиной. Затем нам нужно установить книжную полку и подключить ее к Vagrant, чтобы управлять зависимостями поваренной книги.
Шаг 1 — Редактировать рецепт по умолчанию в кулинарной книге.
vipin@laptop:~/chef-repo $ subl cookbooks/<Cookbook Name>/recipes/default.rb file "/tmp/greeting.txt" do content node['my_cookbook']['greeting'] end
Шаг 2 — Редактирование атрибутов поваренной книги.
vipin@laptop:~/chef-repo $ subl cookbooks/<Cookbook Name>/attributes/default.rb default['my_cookbook']['greeting'] = "Ohai, Chefs!"
Шаг 3 — Отредактируйте файл gem, чтобы установить необходимые камни Ruby.
vipin@laptop:~/chef-repo $ subl Gemfile gem 'test-kitchen', '~> 2.0.0.alpha.7' gem 'kitchen-vagrant'
Шаг 4 — Установите необходимый рубиновый камень.
vipin@laptop:~/chef-repo $ bundle install ...TRUNCATED OUTPUT... Installing test-kitchen (1.0.0.alpha.7) Installing kitchen-vagrant (0.10.0) ...TRUNCATED OUTPUT...
Шаг 5 — Создайте файл .kitchen.yml в кулинарной книге.
vipin@laptop:~/chef-repo/cookbooks/my_cookbook $ subl .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_ubuntu12.04_provisionerless.box suites: - name: default run_list: - recipe[minitest-handler] - recipe[my_cookbook_test] attributes: { my_cookbook: { greeting: 'Ohai, Minitest!'} }
Шаг 6 — Создайте тестовый каталог в кулинарной книге.
vipin@laptop:~/chef-repo/cookbooks/<Cookbook Name>$ mkdir test
Шаг 7 — Создание тестовой поваренной книги для интеграционного тестирования.
vipin@laptop:~/chef-repo/cookbooks/<Cookbook Name>/test $ knife cookbook create my_cookbook_test ** Creating cookbook my_cookbook_test ** Creating README for cookbook: my_cookbook_test ** Creating CHANGELOG for cookbook: my_cookbook_test ** Creating metadata for cookbook: my_cookbook_test
Шаг 8 — Редактирование рецепта тестовой поваренной книги по умолчанию.
vipin@laptop:~/chef-repo/cookbooks/my_cookbook $ subl test/cookbooks/my_cookbook_test/recipes/default.rb include_recipe 'my_cookbook::default'
Шаг 9 — Создайте Minitest Spec в кулинарной книге.
vipin@laptop:~/chef-repo/cookbooks/my_cookbook $ mkdir -p test/cookbooks/my_cookbook_test/files/default/tests/minitest vipin@laptop:~/chef-repo/cookbooks/my_cookbook $ subl test/cookbooks/my_cookbook_test/files/default/tests/minitest/default_test.rb require 'minitest/spec' describe_recipe 'my_cookbook::default' do describe "greeting file" do it "creates the greeting file" do file("/tmp/greeting.txt").must_exist end it "contains what's stored in the 'greeting' node attribute" do file('/tmp/greeting.txt').must_include 'Ohai, Minitest!' end end
Шаг 10 — Отредактируйте Berksfile вашей основной кулинарной книги.