Как правильно готовитьвместе с Chef



Как правильно готовитьвместе с Chef

0 1


dev-highload-2013

slides for dev highload 2013 Spb

On Github foodtaster / dev-highload-2013

Как правильно готовитьвместе с Chef

Created by foodtaster hospital-systems/waveaccess 2013 dev {highload} 2013

Николай Рыжиков & Михаил Лапшин

@ choice-hospital-systems/waveaccess

1: N+1 changes

  • devs
  • CI
  • staging
  • production

2: Трамвайно - зависимая инфраструктура

Infrastructure.as_a(Code)

Как устроен chef

Chef run

  • Run as super user
  • загрузка node attributes
  • загрузка cookbooks from run_list
  • вычисление желаемого и текущего состояния
  • приведение ноды в желаемое состояние
  • сохранение аттрибутов ноды на сервер

Workflow

Как начать?

Virtualization

Vagrant

Vagrant::Config.run do |config|
  config.vm.box = "precise64"
  config.vm.network :private_network, ip: ip

  config.vm.provision :chef_solo do |chef|
    chef.cookbooks_path = ["cookbooks", "site-cookbooks"]
    chef.add_recipe "pg"
    chef.json = { :users => ['testuser'] }
    chef.log_level = :debug
  end
end

Vagrant & Chef

  • vagrant up vm0
  • vagrant provision vm0
  • vagrant ssh vm0
  • vagrant destroy vm0

TDD & CI

Chef + Vagrant + Rspec = Foodtaster

Test your cookbooks

describe "nginx::default" do
  run_chef_on :vm0 do |c|
    c.json = {}
    c.add_recipe 'nginx'
  end

  it "should install nginx as a daemon" do
    vm0.should have_package 'nginx'
    vm0.should have_user('www-data')
    .in_group('www-data')

    vm0.should have_running_process('nginx')
    vm0.should listen_port(80)
  end
end

Как это работает?

Links