Учебники

Chef — Тестовая кулинарная книга с тестовой кухней

Тестовая кухня — это интегрированная среда тестирования от 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 вашей основной кулинарной книги.