chef
рецепты от шеф-повара
Основные понятия
Node - хост на котором запущен chef-client
chef-client - консольная утилита
обновляющая ноду
chef server - хост с которого ноды
загружают свою конфигурацию
chef-repo - репозиторий с конфигурациями
workstation (Client) - компьютер
разработчика с локальной версией chef-repo
cookbook - поваренная книга
Архитектура
Основные компоненты
ohai - собирает информацию о ноде на
которой запущен (platform, fqdn)
knife - консольная утилита для управления
chef-repo, chef server, nodes and more.
shef - интерактивная ruby консоль для
отладки и управления.
В кратце это работает так
С чего начать?
1. Поднимаем chef server;
2. Настраиваем knife на chef server;
3. Настраиваем workstation (clone chef-repo,
   setup knife);
4. Бутстрапим ноду. knife bootstrap
   10.40.64.143 -r -x root -P <secret>;
5. Обновляем ноду chef-client.
Node
Описывается структурой json. knife node edit
<node_name> для редактирования.

● Аттрибуты;
● Run list - рецепты которые будут
  применены к ноде;
● Environment
● Role
Attributes
Cookbooks
attributes/
definitions/
files/
libraries/
metadata.rb # version, dependency
providers/
README.rdoc
recipes/
resources/
templates/
Recipes
knife cookbook create apache2

cookbooks/apache2/recipes/default.rb
cookbooks/apache2/recipes/mod_ssl.rb

{ # knife node edit <name>
  "run_list": [
    "recipe[apache2]",
    "recipe[apache2::mod_ssl]"
  ]
}
Resources
# Создаем директорию
directory "/tmp/monkey" do
 owner "root"
 group "root"
 mode 0755
 action :create
end

# Запускаем и добавляем в автозагрузку
service "nginx" do
 supports :status => true, :restart => true, :reload => true
 subscribes :reload, resources(:template => "#{node[:nginx][:dir]}/nginx.conf")
 action [:enable, :start]
end
apt-repository example
apt_repository "hardy-rsyslog-ppa" do
  uri "http://ppa.launchpad.net/a.bono/rsyslog/ubuntu"
  distribution "hardy"
  components ["main"]
  keyserver "keyserver.ubuntu.com"
  key "C0061A4A"
  action :add
  notifies :run, "execute[apt-get update]", :immediately
end

apt_repository "zenoss" do
  action :remove
end
php example
php_pear "XML_RPC" do
  action :upgrade
end

php_pear "XML_RPC" do
  version "1.5.4"
  action :install
end

php_pear "apc" do
  action :install
  directives(:shm_size => 128, :enable_cli => 1)
end
Providers
action :create do
 execute "create database" do
  not_if "mysql -e 'show databases;' | grep #{new_resource.name}"
  command "mysqladmin create #{new_resource.name}"
 end
end

action :delete do
 execute "delete database" do
  only_if "mysql -e 'show databases;' | grep #{new_resource.name}"
  command "mysqladmin drop #{new_resource.name}"
 end
end
Search
knife search admins 'id:charlie'
knife search node 'name:app?.example.com'

knife search node "broadcast:192.168.0.*"
knife search node "mtu:1500"
knife search node "flags:UP"



search(:node, 'run_list:recipe[foo::bar]')
search(:node, 'role:load_balancer')
Data bags
knife data bag create admins
vi data_bags/admins/charlie.json

{
 "id": "charlie",
 "uid": 1005,
 "gid":"ops",
 "shell":"/bin/zsh",
 "comment":"Crazy Charlie"
}

# in receipt
data_bag_item('admins', 'charlie')
workstation workflow
● knife cookbook create <name>
● knife cookbook upload <name>
● Изменения в нодах, синхронизируются
  автоматически.
deploy example
deploy "/my/deploy/dir" do
 repo "git@github.com/whoami/project"
 revision "abc123" # or "HEAD" or "TAG_for_1.0" or (subversion) "1234"
 user "deploy_ninja"
 enable_submodules true
 migrate true
 migration_command "rake db:migrate"
 environment "RAILS_ENV" => "production", "OTHER_ENV" => "foo"
 shallow_clone true
 action :deploy # or :rollback
 restart_command "touch tmp/restart.txt"
 git_ssh_wrapper "wrap-ssh4git.sh"
 scm_provider Chef::Provider::Git # is the default, for svn: Chef::Provider::Subversion
end
Полезняшки
●   http://wiki.opscode.com/display/chef/Home
●   https://github.com/opscode/chef-repo
●   http://habrahabr.ru/company/scalaxy/blog/87302/
●   http://vagrantup.com/
●   http://www.opscode.com/ (chef-server)
Спасибо за внимание
email: mokevnin@gmail.com
blog: www.wddx.ru
Кайдзен www.kaize.ru

twitter.com/mokevnin

Chef

  • 1.
  • 2.
    Основные понятия Node -хост на котором запущен chef-client chef-client - консольная утилита обновляющая ноду chef server - хост с которого ноды загружают свою конфигурацию chef-repo - репозиторий с конфигурациями workstation (Client) - компьютер разработчика с локальной версией chef-repo cookbook - поваренная книга
  • 3.
  • 4.
    Основные компоненты ohai -собирает информацию о ноде на которой запущен (platform, fqdn) knife - консольная утилита для управления chef-repo, chef server, nodes and more. shef - интерактивная ruby консоль для отладки и управления.
  • 5.
    В кратце этоработает так
  • 6.
    С чего начать? 1.Поднимаем chef server; 2. Настраиваем knife на chef server; 3. Настраиваем workstation (clone chef-repo, setup knife); 4. Бутстрапим ноду. knife bootstrap 10.40.64.143 -r -x root -P <secret>; 5. Обновляем ноду chef-client.
  • 7.
    Node Описывается структурой json.knife node edit <node_name> для редактирования. ● Аттрибуты; ● Run list - рецепты которые будут применены к ноде; ● Environment ● Role
  • 8.
  • 10.
    Cookbooks attributes/ definitions/ files/ libraries/ metadata.rb # version,dependency providers/ README.rdoc recipes/ resources/ templates/
  • 11.
    Recipes knife cookbook createapache2 cookbooks/apache2/recipes/default.rb cookbooks/apache2/recipes/mod_ssl.rb { # knife node edit <name> "run_list": [ "recipe[apache2]", "recipe[apache2::mod_ssl]" ] }
  • 12.
    Resources # Создаем директорию directory"/tmp/monkey" do owner "root" group "root" mode 0755 action :create end # Запускаем и добавляем в автозагрузку service "nginx" do supports :status => true, :restart => true, :reload => true subscribes :reload, resources(:template => "#{node[:nginx][:dir]}/nginx.conf") action [:enable, :start] end
  • 13.
    apt-repository example apt_repository "hardy-rsyslog-ppa"do uri "http://ppa.launchpad.net/a.bono/rsyslog/ubuntu" distribution "hardy" components ["main"] keyserver "keyserver.ubuntu.com" key "C0061A4A" action :add notifies :run, "execute[apt-get update]", :immediately end apt_repository "zenoss" do action :remove end
  • 14.
    php example php_pear "XML_RPC"do action :upgrade end php_pear "XML_RPC" do version "1.5.4" action :install end php_pear "apc" do action :install directives(:shm_size => 128, :enable_cli => 1) end
  • 15.
    Providers action :create do execute "create database" do not_if "mysql -e 'show databases;' | grep #{new_resource.name}" command "mysqladmin create #{new_resource.name}" end end action :delete do execute "delete database" do only_if "mysql -e 'show databases;' | grep #{new_resource.name}" command "mysqladmin drop #{new_resource.name}" end end
  • 16.
    Search knife search admins'id:charlie' knife search node 'name:app?.example.com' knife search node "broadcast:192.168.0.*" knife search node "mtu:1500" knife search node "flags:UP" search(:node, 'run_list:recipe[foo::bar]') search(:node, 'role:load_balancer')
  • 17.
    Data bags knife databag create admins vi data_bags/admins/charlie.json { "id": "charlie", "uid": 1005, "gid":"ops", "shell":"/bin/zsh", "comment":"Crazy Charlie" } # in receipt data_bag_item('admins', 'charlie')
  • 18.
    workstation workflow ● knifecookbook create <name> ● knife cookbook upload <name> ● Изменения в нодах, синхронизируются автоматически.
  • 19.
    deploy example deploy "/my/deploy/dir"do repo "git@github.com/whoami/project" revision "abc123" # or "HEAD" or "TAG_for_1.0" or (subversion) "1234" user "deploy_ninja" enable_submodules true migrate true migration_command "rake db:migrate" environment "RAILS_ENV" => "production", "OTHER_ENV" => "foo" shallow_clone true action :deploy # or :rollback restart_command "touch tmp/restart.txt" git_ssh_wrapper "wrap-ssh4git.sh" scm_provider Chef::Provider::Git # is the default, for svn: Chef::Provider::Subversion end
  • 20.
    Полезняшки ● http://wiki.opscode.com/display/chef/Home ● https://github.com/opscode/chef-repo ● http://habrahabr.ru/company/scalaxy/blog/87302/ ● http://vagrantup.com/ ● http://www.opscode.com/ (chef-server)
  • 21.
    Спасибо за внимание email:mokevnin@gmail.com blog: www.wddx.ru Кайдзен www.kaize.ru twitter.com/mokevnin