В данном посте я хотел бы рассказать о test kitchen. Данный инструмент позволяет протестировать работу кукбуков в одном или нескольких изолированных инстансах. Особенностью является возможность «поднимать» инстансы используя клауд провайдеров или платформы виртуализации такие как Amazon EC2, Blue Box, CloudStack, Digital Ocean, Rackspace, OpenStack, Vagrant, Docker, LXC containers и др. Так же поддепрживается множество тест фреймворков таких как Bats, shUnit2, RSpec, Serverspec и пр.
Нас же интересуют Berkshelf и Librarian-Chef, данные инструменты позволяют контролировать версии и зависимости наших кукбуков.
Так же хотелось бы отметить что поддержка test kitchen уже добавлена в такие кмоьюнити кукбуки как MySQL, nginx, Chef Server, runit и многие другие. Мы будем рассматривать связу testkitchen, vagrant, virualbox, berkshelf.
Данный пост предназначен для новичков, т.к. здесь описаны довольно очевидные вещи.
ШАГ 1. Подготовка окружения
VirtualBox & Vagrant
Для начала нам понадобится установленные VirtualBox и vagrant
После установки vagrant'a необходимо выполнить перезагрузку.
После перезагрузки проверяем работоспособность vagrant:
mkdir C:\vagrant && cd C:\vagrant
C:\vagrant>vagrant box add precise32 http://ift.tt/OtdHBvDownloading box from URL: http://ift.tt/OtdHBvExtracting box...ate: 3089k/s, Estimated time remaining: --:--:--)Successfully added box 'precise32' with provider 'virtualbox'!
C:\vagrant>vagrant init
-- config.vm.box = "base"++ config.vm.box = "precise32"
C:\vagrant>vagrant up
login as: vagrantvagrant@localhost's password: vagrantWelcome to Ubuntu 12.04 LTS (GNU/Linux 3.2.0-23-generic-pae i686)* Documentation: http://ift.tt/ABdZxnWelcome to your Vagrant-built virtual machine.
Если удалось подключится — значит все сделали правильно.
Ruby & Ruby DevKit
Теперь нужно установить ruby.
Если у Вас установлен chef-client его необходимо удалить, т.к. мы будем использовать установленный через gem.
Во время установки нужно отметить пункт «Add Ruby executables to your PATH» чтобы можно было свободно запускать ruby из командной строки.
Далее нужно установить DevKit, т.к. он содержит необходимый набор ПО(компилятор, библиотеки — одним словом Devkit). Хочу обратить Ваше внимание на то, что установку желательно производить в каталог по умолчанию(как ruby так и DevKit) иначе могут возникнуть проблемы.
Для установки проделываем следующие шаги:
mkdir C:\devkit && cd C:\devkit
C:\devkit>ruby dk.rb init[INFO] found RubyInstaller v1.9.3 at C:/Ruby193Initialization complete! Please review and modify the auto-generated'config.yml' file to ensure it contains the root directories to allof the installed Rubies you want enhanced by the DevKit.
Видим что определились путь и версия установленного ruby
C:\DevKit>ruby dk.rb install[INFO] Updating convenience notice gem override for 'C:/Ruby193'[INFO] Installing 'C:/Ruby193/lib/ruby/site_ruby/devkit.rb'После выполненя ruby dk.rb install в PATH должны добавиться пути к DevKit,
но, к сожалению, этого не произошло:C:\DevKit>echo %PATH%C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;C:\Ruby193\bin
Значит нужно вручную добавить в PATH путь к DevKit директории.
Есть несколько вариантов как это сделать:
1. В командной строке выполнить командуsetx PATH "C:\DevKit\mingw\bin\;C:\DevKit\bin\"
в данном случае создастся переменная PATH в пользовательских переменных;
2. Открвыаем cmd от имени Администратора и выполняем:setx PATH "%PATH%;C:\DevKit\mingw\bin\;C:\DevKit\bin\" /M
в данном случае пути к Devkit добавятся в конец системной переменной PATH
3. Данный способ рекомендуется если Вы не уверенны в первых двух:Мой компьютер > Свойства > Дополнительные параметры системы > Переменные среды.
Редактируем PATH и добавляем C:\DevKit\bin\ и C:\DevKit\mingw\bin\
Открываем новый терминал(cmd) и проверяем:C:\Users\cc>echo %PATH%C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;C:\Ruby193\bin;C:\DevKit\mingw\bin\;C:\DevKit\bin\
ШАГ 2. Установка Test Kitchen
И, наконец, можем приступить к уставновке test kitchen:
C:\>mkdir C:\kitchen && cd C:\kitchen
C:\DevKit>gem install bundlerFetching: bundler-1.5.2.gem (100%)Successfully installed bundler-1.5.21 gem installedInstalling ri documentation for bundler-1.5.2...Installing RDoc documentation for bundler-1.5.2...
source 'https://rubygems.org'gem 'berkshelf', '~> 2.0.0' # use for manage cookbook dependenciesgem 'chef', '~> 11.6.0'gem 'chef-zero'gem 'json', '1.7.7' # needed for conflict resolutiongem 'kitchen-vagrant'gem 'test-kitchen'
C:\kitchen>bundle installFetching gem metadata from https://rubygems.org/.......Fetching additional metadata from https://rubygems.org/..Resolving dependencies...Installing i18n (0.6.9)Installing multi_json (1.8.4)Installing activesupport (3.2.16)
…Installing test-kitchen (1.0.0)Installing kitchen-vagrant (0.11.3)Using bundler (1.5.2)Your bundle is complete!Use `bundle show [gemname]` to see where a bundled gem is installed.
mkdir C:\kitchen\cookbooks && cd C:\kitchen\cookbooks && knife cookbook site download sendmail
C:\kitchen>kitchen initcreate .kitchen.ymlcreate test/integration/defaultcreate .gitignoreappend .gitignoreappend .gitignore
---driver_plugin: vagrantdriver_config:require_chef_omnibus: true
platforms:- name: ubuntu-12.04driver_config:box: opscode-ubuntu-12.04box_url: http://ift.tt/1m5yaNG
suites:- name: defaultrun_list: ["recipe[sendmail]"]attributes: {}
C:\kitchen>kitchen test.....................←[0m[2014-01-11T10:17:15+00:00] INFO: *** Chef 11.8.2 ***←[36m←[0m[2014-01-11T10:17:15+00:00] INFO: Chef-client pid: 1169←[36m←[0m[2014-01-11T10:17:16+00:00] INFO: Setting the run_list to ["recipe[sendmail]"] from JSON←[36m←[0m[2014-01-11T10:17:16+00:00] INFO: Run List is [recipe[sendmail]]←[36m←[0m[2014-01-11T10:17:16+00:00] INFO: Run List expands to [sendmail]←[36m←[0m[2014-01-11T10:17:16+00:00] INFO: Starting Chef Run for default-ubuntu-1204←[36m←[0m[2014-01-11T10:17:16+00:00] INFO: Running start handlers←[36m←[0m[2014-01-11T10:17:16+00:00] INFO: Start handlers complete.←[36m←[0mCompiling Cookbooks...←[0m←[36m←[0mConverging 2 resources←[0m←[36m←[0mRecipe: sendmail::default←[0m←[36m←[0m * package[sendmail] action install←[0m[2014-01-11T10:17:16+00:00] INFO: Processing package[sendmail] action install(sendmail::default line 1)←[36m←[0m←[32m←[36m←[0m - install version 8.14.4-2ubuntu2 of package sendmail←[0m←[36m←[0m←[0m←[36m←[0m * service[sendmail] action enable←[0m[2014-01-11T10:17:27+00:00] INFO: Processing service[sendmail] action enable (sendmail::default line 6)←[36m←[0m[2014-01-11T10:17:27+00:00] INFO: service[sendmail] enabled←[36m←[0m←[32m←[36m←[0m - enable service service[sendmail]←[0m←[36m←[0m←[0m←[36m←[0m * service[sendmail] action start←[0m[2014-01-11T10:17:27+00:00] INFO: Processing service[sendmail] action start (sendmail::default line 6)←[36m←[0m (up to date)←[0m←[36m←[0m[2014-01-11T10:17:27+00:00] INFO: Chef Run complete in 11.695990777 seconds←[36m←[0m[2014-01-11T10:17:27+00:00] INFO: Running report handlers←[36m←[0m[2014-01-11T10:17:27+00:00] INFO: Report handlers complete←[36m←[0mChef Client finished, 2 resources updated←[0m←[36m←[0m←[36m Finished converging <default-ubuntu-1204> (0m29.54s).←[0m←[36m-----> Setting up <default-ubuntu-1204>←[0m←[36m Finished setting up <default-ubuntu-1204> (0m0.00s).←[0m←[36m-----> Verifying <default-ubuntu-1204>←[0m←[36m Finished verifying <default-ubuntu-1204> (0m0.00s).←[0m←[36m-----> Destroying <default-ubuntu-1204>←[0m←[36m [kitchen::driver::vagrant command] BEGIN (vagrant destroy -f)←[0m←[36m [default] Forcing shutdown of VM...←[0m←[36m [default] Destroying VM and associated drives...←[0m←[36m [kitchen::driver::vagrant command] END (0m0.00s)←[0m←[36m Vagrant instance <default-ubuntu-1204> destroyed.←[0m←[36m Finished destroying <default-ubuntu-1204> (0m4.85s).←[0m←[36m Finished testing <default-ubuntu-1204> (1m16.33s).←[0m-----> Kitchen is finished. (1m16.69s)Видим что chef-client отработал без ошибок и пакет sendmail был успешно установлен.
После успешного выполнения инстанс удаляется.
В случае же ошибки, инстанс отстается запущеным.
Это сделано для того чтобы можно было проанализировать проблему внутри инстанса.
ШАГ 3. Berkshelf
Berkshelf нам нужен для разрешения проблем с зависимостями кукбуков.
Т.к. мы его установили на прошлом этапе — приступаем к настройке:
C:\kitchen>vagrant plugin install vagrant-berkshelfInstalling the 'vagrant-berkshelf' plugin. This can take a few minutes...Installed the plugin 'vagrant-berkshelf (1.3.7)'!
C:\kitchen>berks init chef-cookcreate chef-cook/Berksfilecreate chef-cook/Thorfilecreate chef-cook/.gitignorerun git init from "./chef-cook"C:/Ruby193/bin/berks: No such file or directory - git initcreate chef-cook/Gemfilecreate .kitchen.ymlappend Thorfilecreate test/integration/defaultappend Gemfileappend GemfileYou must run `bundle install' to fetch any new gems.create chef-cook/VagrantfileSuccessfully initialized
cd C:\kitchen\chef-cook && bundle install
mkdir C:\kitchen\chef-cook\cookbooks && cd C:\kitchen\chef-cook\cookbooks && berks cookbook mytest
C:\kitchen\chef-cook\.kitchen.yml---suites:- name: defaultrun_list: ["recipe[mytest]"]attributes: {}
C:\kitchen\chef-cook>kitchen testи получаем ошибку:
ERROR: Cookbook mytest not found. If you're loading mytest from another cookbook, make sure you configure the dependency in your metadataдля того чтобы её исправить нужно добавить в Berksfile следующую строку:
cookbook 'mytest', :path => 'cookbooks/mytest'
данная запись говорит где Berkshelf может найти данный кукбук.
Далее немного усложним задачу, добавив зависимость от кукбука, которого у нас локально нет, например sendmail.
include_recipe 'sendmail'
depends 'sendmail'
site :opscodecookbook 'sendmail'cookbook 'mytest', :path => 'cookbooks/mytest'Т.е. мы добавили «cookbook 'sendmail'», данная запись говорит о том что в случае необходимости Berkshelf может скачать кукбук sendmail с комьюнити репозитория.
C:\kitchen\chef-cook>kitchen conerge....←[0m←[36m Resolving cookbook dependencies with Berkshelf...←[0mInstalling sendmail (0.1.0) from site: 'http://ift.tt/1coOiSb'Using mytest (0.1.0) at './cookbooks/mytest'....←[0m * package[sendmail] action install←[0m[2014-01-15T08:00:44+00:00] INFO: Processing package[sendmail] action install (sendmail::default line 1)←[....←[0mChef Client finished, 2 resources updated←[0m←[36m←[0m←[36m Finished converging <default-ubuntu-1204> (0m18.25s).←[0m-----> Kitchen is finished. (0m18.68s)Из данного лога видно что кукбук sendmail успешно скачался и пакет sendmail был установлен.
Повторюсь, данный пост ориентирован на новичков в данном направлении, чтобы показать самые азы данных инструментов. Но, тем не менее, используя их можно управлять большим количеством кукбуков. Возможно, в дальнейшем напишу более детально об использовании Berkshelf
Полезные ссылки
Chef HomePage
Test Kitchen HomePage
Berkshelf HomePage
Opscode community cookbooks
Более детально о самом chef'е пишет MistiC тут
This entry passed through the Full-Text RSS service — if this is your content and you're reading it on someone else's site, please read the FAQ at http://ift.tt/jcXqJW.
Комментариев нет:
Отправить комментарий