cookbook testing with kitcenci and serverrspec

45
COOKBOOK TESTING WITH KITCHENCI AND SERVERSPEC

Upload: daniel-paulus

Post on 15-Jul-2015

95 views

Category:

Technology


0 download

TRANSCRIPT

COOKBOOK TESTING WITH KITCHENCI AND SERVERSPEC

user ‘daniel’ do home /Inuits/Rotterdam comment ‘Open Source Consultant’ shell ‘/twitter/@dpnl87’ action :manage end

IF WE CAN MODEL INFRASTRUCTURE AS CODE

CAN WE APPLY DEVELOPMENT PROCESS AND PRACTICES?

Yes We Can.

YOUR INFRASTRUCTURE DESERVES TESTS TOO

TEST KITCHEN

AN INFRASTRUCTURE TESTING TOOL

A TEST HARNESS TOOL TO EXECUTE YOUR CONFIGURED CODE ON ONE

OR MORE PLATFORMS IN ISOLATION

CHEFDK

KNIFE CREATE COOKBOOK NTP** Creating cookbook ntp

** Creating README for cookbook: ntp ** Creating CHANGELOG for cookbook: ntp

** Creating metadata for cookbook: ntp

ntp ├── CHANGELOG.md ├── README.md ├── attributes ├── definitions ├── files │   └── default ├── libraries ├── metadata.rb ├── providers ├── recipes │   └── default.rb ├── resources └── templates └── default

BERKS INITcreate Berksfile create Thorfile

create chefignore create .gitignore create Gemfile

create .kitchen.yml!create test/integration/default

You must run `bundle install' to fetch any new gems. create Vagrantfile

ntp ├── .kitchen.yml ├── Berksfile ├── CHANGELOG.md ├── Gemfile ├── README.md ├── Thorfile ├── Vagrantfile ├── attributes ├── chefignore ├── definitions ├── files │   └── default

!

├── libraries ├── metadata.rb ├── providers ├── recipes │   └── default.rb ├── resources ├── templates │   └── default └── test └── integration └── default

--- driver: name: vagrant !

provisioner: name: chef_solo name: chef_zero !

platforms: - name: ubuntu-12.04 - name: centos-6.5 !

suites: - name: default run_list: - recipe[ntp::default] attributes:

KITCHEN CREATE-----> Starting Kitchen (v1.2.1)

-----> Creating <default-ubuntu-1204>… -----> Creating <default-centos-65>… -----> Kitchen is finished. (2m53.92s)

KITCHEN LISTInstance Driver Provisioner Last Action default-ubuntu-1204 Vagrant ChefSolo Created default-centos-65 Vagrant ChefSolo Created

KITCHEN CONVERGE-----> Starting Kitchen (v1.2.1)

-----> Converging <default-centos-65>… -----> Installing Chef Omnibus (true) -----> Kitchen is finished. (0m33.76s)

1 %w(ntp ntpdate).each do |pkg| 2 package pkg 3 end

KITCHEN CONVERGE-----> Starting Kitchen (v1.2.1)

-----> Converging <default-centos-65>… -----> Installing Chef Omnibus (true)

- install version 4.2.6p5-1.el6.centos of package ntp!-----> Kitchen is finished. (0m49.52s)

KITCHEN LOGINLast login: Mon Nov 10 20:24:06 2014 from 10.0.2.2

[vagrant@default-centos-65 ~]$

SERVICE NTPD STATUSntpd is stopped

echo "gem 'serverspec'" >> Gemfile

BUNDLE INSTALLInstalling rspec-its 1.1.0 Installing specinfra 2.4.2

Installing serverspec 2.3.1

mkdir -p test/integration/default/serverspec

1 require 'serverspec' 2 3 set :backend, :exec 4 5 RSpec.configure do |c| 6 c.before :all do 7 c.path = '$PATH:/sbin:/usr/sbin' 8 end 9 end

1 require 'spec_helper' 2 3 describe service('ntpd') do 4 it { should be_enabled } 5 end

KITCHEN VERIFY-----> Starting Kitchen (v1.2.1)

-----> Verifying <default-centos-65>… -----> Running serverspec test suite

>>>>>> Verify failed on instance <default-centos-65>.

5 service 'ntpd' do 6 action [ :enable, :start ] 7 end

KITCHEN CONVERGE-----> Starting Kitchen (v1.2.1)

-----> Converging <default-centos-65>… - enable service service[ntpd]!- start service service[ntpd]!

-----> Kitchen is finished. (0m4.56s)

KITCHEN VERIFY-----> Starting Kitchen (v1.2.1)

-----> Setting up <default-centos-65>... -----> Setting up Busser

-----> Verifying <default-centos-65>… -----> Running serverspec test suite

-----> Kitchen is finished. (0m7.75s)

MORE TESTS

7 describe file('/etc/ntp.conf') do 8 it { should be_file } 9 end

MORE SPEED

provisioner: name: chef_zero require_chef_omnibus: false !

platforms: - name: centos-6.5 driver: box: inuits/centos box_url: http://dl.inuits.eu/d/centos.box

CLOUD KITCHEN

--- driver: require_chef_omnibus: true name: ec2 aws_access_key_id: "<%= ENV['AWS_ACCESS_KEY_ID']%>" aws_secret_access_key: "<%= ENV['AWS_SECRET_ACCESS_KEY']%>" aws_ssh_key_id: "<%= ENV['AWS_SSH_KEY_ID']%>" ssh_key: "<%= ENV['AWS_SSH_KEY']%>"

KITCHEN CREATE-----> Starting Kitchen (v1.2.1)

-----> Creating <default-centos65>... EC2 instance <i-5b6f2b70> created.!-----> Kitchen is finished. (3m3.40s)

DOCKER?!

docker docker docker docker docker docker docker docker docker docker docker docker docker docker docker docker docker docker docker docker docker docker docker docker docker docker docker docker docker docker docker docker docker docker docker docker docker docker docker docker docker docker docker docker docker docker docker docker docker docker docker docker docker docker docker docker docker docker docker docker docker docker docker docker docker docker docker docker docker docker docker docker docker docker docker docker docker docker docker docker docker docker docker docker docker docker docker docker docker docker docker docker docker docker docker docker docker docker docker docker docker docker docker docker docker docker docker docker docker docker docker docker docker docker docker docker docker docker docker docker docker docker docker docker docker docker docker docker docker docker docker docker docker docker docker docker docker docker docker docker docker docker docker docker docker docker docker docker docker docker docker docker docker docker docker docker docker docker docker docker docker docker docker docker docker docker docker docker

--- driver: name: docker !

provisioner: name: chef_zero !

platforms: - name: centos65 driver: image_id: 3448641 region_id: 4

KITCHEN CREATE-----> Starting Kitchen (v1.2.2.dev) -----> Creating <default-centos65> Step 0 : FROM centos:latest

Pulling repository centos!---> 0c752394b855!

-----> Kitchen is finished. (1m19.34s)

THANK YOU