2. Основные понятия
Node - хост на котором запущен chef-client
chef-client - консольная утилита
обновляющая ноду
chef server - хост с которого ноды
загружают свою конфигурацию
chef-repo - репозиторий с конфигурациями
workstation (Client) - компьютер
разработчика с локальной версией chef-repo
cookbook - поваренная книга
4. Основные компоненты
ohai - собирает информацию о ноде на
которой запущен (platform, fqdn)
knife - консольная утилита для управления
chef-repo, chef server, nodes and more.
shef - интерактивная ruby консоль для
отладки и управления.
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
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
17. 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')
18. workstation workflow
● knife cookbook 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