Build Chef development box from scratch

Post on 20-Jan-2017

228 views 4 download

Transcript of Build Chef development box from scratch

Chef Development Boxwith Packer, Vagrant and Travis CI

build chef-takeaway

by Simone Soldateschi20150625

Who I am● Senior DevOps Engineer, Sydney● Lead DevOps Team at Rackspace AU● 15 years of experience as

○ Software Eng○ Systems Eng○ Been DevOps'in for the last 5-ish years

Why

chef-takeaway

● simple● repeatable● versioned

Things should be

“Simple”Just 3 steps:● git clone git@github.com:siso/chef-takeaway.git● .● vagrant up● vagrant ssh -- -A

I lied ;)Just 3 steps:● git clone git@github.com:siso/chef-takeaway.git● cd chef-takeaway● vagrant up● vagrant ssh -- -A

…/usr/lib/ruby/gems/1.8/gems/rails-2.3.4/lib/rails/gem_dependency.rb:119:in `requirement': undefined local variable or method `version_requirements' for #<Rails::GemDependency:0xb7181c78> (NameError)from /usr/local/lib/site_ruby/1.8/rubygems.rb:254:in `activate'from /usr/local/lib/site_ruby/1.8/rubygems.rb:1204:in `gem'from /usr/lib/ruby/gems/1.8/gems/rails-2.3.4/lib/rails/gem_dependency.rb:73:in `add_load_paths'from /usr/lib/ruby/gems/1.8/gems/rails-2.3.4/lib/initializer.rb:301:in `add_gem_load_paths'from /usr/lib/ruby/gems/1.8/gems/rails-2.3.4/lib/initializer.rb:301:in `each'from /usr/lib/ruby/gems/1.8/gems/rails-2.3.4/lib/initializer.rb:301:in `add_gem_load_paths'from /usr/lib/ruby/gems/1.8/gems/rails-2.3.4/lib/initializer.rb:132:in `process'from /usr/lib/ruby/gems/1.8/gems/rails-2.3.4/lib/initializer.rb:113:in `send'from /usr/lib/ruby/gems/1.8/gems/rails-2.3.4/lib/initializer.rb:113:in `run'from /home/user/application/config/environment.rb:19from /usr/local/lib/site_ruby/1.8/rubygems/custom_require.rb:29:in `gem_original_require'from /usr/local/lib/site_ruby/1.8/rubygems/custom_require.rb:29:in `require'from /usr/lib/ruby/gems/1.8/gems/activesupport-2.3.4/lib/active_support/dependencies.rb:156:in `require'from /usr/lib/ruby/gems/1.8/gems/activesupport-2.3.4/lib/active_support/dependencies.rb:521:in `new_constants_in'from /usr/lib/ruby/gems/1.8/gems/activesupport-2.3.4/lib/active_support/dependencies.rb:156:in `require'from /usr/lib/ruby/gems/1.8/gems/rails-2.3.4/lib/commands/server.rb:84from /usr/local/lib/site_ruby/1.8/rubygems/custom_require.rb:29:in `gem_original_require'from /usr/local/lib/site_ruby/1.8/rubygems/custom_require.rb:29:in `require'from script/server:3...

“Repeatable”

vagrant destroy && vagrant up

“Repeatable”

“Versioned”

What

Linux

your favourite Linux distro

Provisioning

install and configure all the things

Test it

Share

Run it

manage boxes easily

TDD

Kitchen CI and Docker

How

Build

Build

Build● variables● builders● provisioner● post-processor

Build"variables": {

"core": 1,"memory": 512,"disk_size": 10140,"ssh_port": 22,"ssh_wait_timeout": "10000s","iso_url": "http://cdimage.debian.org/debian-cd/8.0.0/amd64/iso-cd/debian-8.0.0-amd64-netinst.iso","iso_md5": "d9209f355449fe13db3963571b1f52d4","vm_name": "chef-takeaway","vm_version": "0.3.1”},

"builders": [{

"boot_command": ["<esc><wait>","install <wait>","preseed/url=http://{{ .HTTPIP }}:{{ .HTTPPort }}/preseed-jessie.cfg <wait>",..."<enter><wait>"],"disk_size": "{{user `disk_size`}}","guest_os_type": "Debian_64","headless": true,...

Build

"provisioners": [{

"type": "shell","execute_command": "echo 'vagrant' | {{ .Vars }} sudo -E -S sh '{{ .Path }}'","inline": [

"sleep 30"]},...

Build

"provisioners": [...,{

"type": "ansible-local","pause_before": "5s","playbook_dir": "../ansible","playbook_file": "../ansible/main.yml","role_paths": ["../ansible"],"extra_arguments": ["-vvvv", "-u", "root"]},

Build

Build"post-processors": [

{"type": "vagrant","output": "./{{.Provider}}/{{user `vm_name`}}-{{user `vm_version`}}.box"

}],

Push and Test

Share

Recap

Simone Soldateschi