Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
ChefКраткая вводная в инфраструктуру
Как это бывает• ruby <(curl -fsSkL raw.github.com/mxcl/  homebrew/go)• brew install git wget postgresql-server gmp  gettex...
Ещё это бывает так• ./install_all_packages_what_i_know.sh• 333.times { wget .. && cd .. && configure &&  make && make insta...
Как это бывает реже• ./install_ruby.sh with_rvm=true• ./install_debian_nginx.sh• ./install_postgresql.sh• кажется я ещё чт...
Почему так?• Нужно учесть версии ОС• Не всегда нужны все пакеты• Компьютеров становится больше, а  времени на их настройку...
Решение• # chef-solo  или• # chef-client  в общем• Chef!
Почему chef?• относительная проста• большое активное коммунити• экономия времени• голова больше не болит!
Основные компоненты• Recipe• Cookbook• Resource и Provider• Attributes и Templates• Roles• DataBags
Recipe• Установка конкретного пакета или части• Ruby-файл с Chef DSL:  # mkdir -r /etc/iptables.d/  directory ‘/etc/iptabl...
Cookbook• Описывает полноценный компонент  системы• Кукбук добавляется в ноду, но не рецепт• Может содержать несколько рец...
Resource и Provider• Описывает сущности необходимые для  правильной конфигурации ноды• Позволяет избавится от рутины• Опис...
Resource• Свойства ресурса  # cookbooks/vagrant/resources/box.rb  action :install  attribute :name, :kind_of => String, :n...
Provider• Поведение ресурса  # cookbooks/vagrant/providers/box.rb  action :install do   execute ‘downloading_box_#{new_res...
Attribute• Многоуровненый хеш для хранения  настроек• Добавление и изменение настроек  # cookbooks/vagrant/attributes/defa...
Template• Является ресурсом• Создаёт файлы на основе erb-шаблона  # cookbooks/vagrant/resource/box.rb  ...  template "#{no...
Role• Объеденяет кукбуки и рецепты в группы• Переопределение аттрибутов• Меньше букв для описания ноды  # cookbooks/roles/...
DataBag• Key-value хранилище• Ещё меньше рутины
Nodes• Описывает конкретную машину  # cookbooks/nodes/mainframe.json  {    ‘chef_type’: ‘node’, ‘json_class’: ‘Chef::Node’...
Итоговая            конфигурацияnodes /                   # Ноды   mainframe.jsoncookbooks /               # Кукбуки   vag...
Сетапим через             Chef-Solo# cat ~/solo.rbfile_cache_path "/var/chef-solo"              # Файловый кешcookbook_path...
Ссылкиhttp://b23.ru/y5c6 - Chef Basics / Introduction to Cookbooks and Morehttp://b23.ru/y5c7 - Opscode / Community / Cook...
Chef коротко об инфраструктуре
Upcoming SlideShare
Loading in …5
×

Chef коротко об инфраструктуре

892 views

Published on

  • Be the first to comment

Chef коротко об инфраструктуре

  1. 1. ChefКраткая вводная в инфраструктуру
  2. 2. Как это бывает• ruby <(curl -fsSkL raw.github.com/mxcl/ homebrew/go)• brew install git wget postgresql-server gmp gettext icu4c libmcrypt libjpeg libxml2• 666.times { wget .. && cd .. && configure && make && make install }• vim configA && vim configB && ... && vim configFFFA
  3. 3. Ещё это бывает так• ./install_all_packages_what_i_know.sh• 333.times { wget .. && cd .. && configure && make && make install }• vim configA && vim configB && ... && vim configFFFA
  4. 4. Как это бывает реже• ./install_ruby.sh with_rvm=true• ./install_debian_nginx.sh• ./install_postgresql.sh• кажется я ещё что-то забыл, поэтому 25.times { get ... && cd ... && configure ... }
  5. 5. Почему так?• Нужно учесть версии ОС• Не всегда нужны все пакеты• Компьютеров становится больше, а времени на их настройку меньше• Простые условия порождают сложную логику
  6. 6. Решение• # chef-solo или• # chef-client в общем• Chef!
  7. 7. Почему chef?• относительная проста• большое активное коммунити• экономия времени• голова больше не болит!
  8. 8. Основные компоненты• Recipe• Cookbook• Resource и Provider• Attributes и Templates• Roles• DataBags
  9. 9. Recipe• Установка конкретного пакета или части• Ruby-файл с Chef DSL: # mkdir -r /etc/iptables.d/ directory ‘/etc/iptables.d/’ do recursive true end # apt-get | yum | brew package ‘iptables’
  10. 10. Cookbook• Описывает полноценный компонент системы• Кукбук добавляется в ноду, но не рецепт• Может содержать несколько рецептов # ls cookbooks/rvm/recipes/ default.rb ruby_193.rb ruby_187.rb ree.rb
  11. 11. Resource и Provider• Описывает сущности необходимые для правильной конфигурации ноды• Позволяет избавится от рутины• Описание ресурса хранится в resources/• Описание поведение лежит в providers/• Есть предопределённые ресурсы
  12. 12. Resource• Свойства ресурса # cookbooks/vagrant/resources/box.rb action :install attribute :name, :kind_of => String, :name_attribute => true attribute :url, :kind_of => String, :default => nil• Вызов ресурса # cookbooks/vagrant/recipies/default.rb vagrant_box ‘projectA’ do url ‘http://files.vagrantup.com/precise64.box’ action :install end
  13. 13. Provider• Поведение ресурса # cookbooks/vagrant/providers/box.rb action :install do execute ‘downloading_box_#{new_resource.name}’ do user ‘root‘ cwd ‘/opt/boxes/‘ command "wget -s #{new_resource.url} -o #{new_resource.name}/box.box" creates "#{new_resource.name}/box.box" end execute ‘add_box_#{new_resource.name}’ do cwd ‘/opt/boxes/#{new_resource.name}/ command "vagrant box add box box.box && vagrant init box && vagrant up" end end
  14. 14. Attribute• Многоуровненый хеш для хранения настроек• Добавление и изменение настроек # cookbooks/vagrant/attributes/default.rb default[‘vagrant’][‘box_path’] = ‘/opt/boxes/’ default[‘vagrant’][‘box_url’] = ‘http://files.vagrantup.com/precise64.box’ # cookbooks/vagrant/resources/box.rb ... attribute :url, :kind_of => String, :default => node[‘vagrant’][‘box_url’]
  15. 15. Template• Является ресурсом• Создаёт файлы на основе erb-шаблона # cookbooks/vagrant/resource/box.rb ... template "#{node[‘vagrant’][‘box_path’]}/Vagrantfile" do source "Vagrantfile.erb " variables :name => new_resource.name end # cookooks/vagrant/templates/Vagrantfile.erb Vagrant::Config.run do |config| config.vm.box = "<% @name %>" end
  16. 16. Role• Объеденяет кукбуки и рецепты в группы• Переопределение аттрибутов• Меньше букв для описания ноды # cookbooks/roles/base.json { ‘chef_type’: ‘role’, ‘json_class’: ‘Chef::Role’, ‘name’: ‘base’, ‘description’: ‘Base Role’, ‘run_list’: [ ‘recipe[apt]’, ‘recipe[sudo]’, ‘recipe[rvm],’ ‘recipe[nginx::source]‘ ], ‘default_attributes’: { ‘vagrant’: { ‘box_path’: ‘/var/vagrant_boxes/’ } } }
  17. 17. DataBag• Key-value хранилище• Ещё меньше рутины
  18. 18. Nodes• Описывает конкретную машину # cookbooks/nodes/mainframe.json { ‘chef_type’: ‘node’, ‘json_class’: ‘Chef::Node’, ‘name’: ‘mainframe’, ‘description’: ‘Mainframe Node’, ‘run_list’: [ ‘role[base], recipe[major_project::mainframe]‘ ], ‘attributes’: { ‘vagrant’: { ‘box_path’: ‘/tmp/vagrant_boxes/’ } } }
  19. 19. Итоговая конфигурацияnodes / # Ноды mainframe.jsoncookbooks / # Кукбуки vagrant / attributes / # Значения по-умолчанию default.rb recipes / # Рецепты default.rb resources / # Ресурсы box.rb providers / # Провайдеры box.rb templates / # Шаблоны Vagrantfile.erbroles / # Роли base.rb
  20. 20. Сетапим через Chef-Solo# cat ~/solo.rbfile_cache_path "/var/chef-solo" # Файловый кешcookbook_path "/var/chef-solo/cookbooks" # Директория с кукбукамиrole_path "/var/chef-solo/roles" # Директория с ролямиdate_bag_path "/var/chef-solo/data_bags" # Директория key-value хранилища# chef-solo -c ~/solo.rb -j ~/var/chef-solo/nodes/mainframe.json# echo ‘WooHoo’
  21. 21. Ссылкиhttp://b23.ru/y5c6 - Chef Basics / Introduction to Cookbooks and Morehttp://b23.ru/y5c7 - Opscode / Community / Cookbookshttp://b23.ru/y5cr - GitHub / Opscode / Cookbooks

×