SlideShare a Scribd company logo
1 of 44
Download to read offline
Ikke test
Puppet-koden
din!
Oslo Puppet Meetup
på Twitter eller Freenode
@beddari
1. Status
Hva kan vi om testing av infrastruktur-kode?
Vi skiller kodemiljøene fra
hverandre
Kanskje en branch, deretter dev, test, qa før prod
Vi itererer raskt i dev-
miljøet
Vagrant, VMware, OpenStack, LXC/Docker
Vi validerer syntaks og
kodestil automatisk
Integrert med versjonskontroll og CI
Vi kjører unit- og
integrasjonstesting
Modules/cookbooks/bundles er kodekomponenter
Hmm .. gjør vi egentlig det?
Vi overvåker og måler
infrastrukturen
Vi overvåker og måler
infrastrukturen tjenestene
OK, men det gjør vi jo? Det gjør vel alle?
- Ja, i prod!
2. Hva er
egentlig
infrastruktur-
kode?
Ikke ditt typiske utviklingsprosjekt, nei
Det egentlige artifaktet er
et dynamisk system!
Start-tilstanden vil ofte være ukjent
Kjøring av koden har flere
inputs enn dine!
Ikke anta for mye om miljøet
Koden beskriver en
tilstand!
Dersom tilstandsbeskrivelsen er korrekt, hva er igjen å
teste?
Tradisjonell testing treffer
ikke godt nok!
Unit- og integrasjonstester gir mindre gevinst
3. Test-
pyramiden
faller?
.. eller hvorfor infra-kodere liker iskrem
Originalen
Mike Cohn, (2009)Succeeding with Agile
Pyramiden 2.0
Robert C. Martin, (2011)The Clean Coder
4. Løsninger?
Endeling kan vi snakke om verktøy!
ogServerspec mspectator
rspec-system
Serverspec
Verktøy og bibliotek for utside-inn testing av server-
infrastruktur
@beddari tidlig i 2013:
Hurra!
Dette er jo enn veldig veldig VELDIG god ide!
Alle kan skrive tester med
serverspec
Ops? Det er bare bash med en wrapper rundt!
Dev? Det er rspec, du kan jo det/lærer det lett!
Både et verktøy i seg selv og et
bibliotek
Ferdig util for å kjøre tester via Vagrant og SSH
Vi vil se kode!
[root@localhost serverspec-eksempel]# tree
.
├── Rakefile
└── spec
├── centos64
│ └── httpd_spec.rb
└── spec_helper.rb
Mulighet for en gjenbrukbar
testbase!!
På kryss av ansvar og bakgrunn
Er alt bare fryd ..
Nei, prosjektet har utfordringer rundt beskrivelse av flere
noder og .. syntaks!
Ideer til implementasjon ...
tenkehatten på!
Testene bør skrives av andre
Vi kan hente data fra ikke-kodet-infrastruktur, typisk
storage, nettverk
Benytte testene i hele kjeden helt fra dev til prod
Testing blir en form for overvåkning? WIN!
mspectator
Fullt ut integrert infrastruktur-testing med Mcollective av
Raphaël Pinson, Camp2camp
mspectator kan benytte
mcollective-filter
Løser problemet med at serverspec knytter testene mot
FQDN
.. also, since I installed mcollective, I lost 5kg, I can see in the dark and cook without using my hands
require 'mspectator'
describe "apache::server" do
it { should find_nodes(10).or_less.with_agent('spec') }
it { should have_certificate.signed }
it { should pass_puppet_spec }
context "when on Debian", :facts => [:operatingsystem => "Debian"] do
it { should find_nodes(5).or_more }
it { should have_service('apache2').with(
:ensure => 'running',
:enable => 'true'
)
}
it { should have_package('apache2') }
it { should have_user('www-data') }
end
end
Arkitekturen er mer komplisert
En må naturlig nok ha mcollective ...
Testene må deployes til nodene som skal kjøre de
Taper noe av elegansen, vinner i utbytte!
rspec-system
Et undercover Puppetlabs-prosjekt av Ken Barber
Mange av de samme tankene
Testing av systemer og gjerne større sett av noder
sammen
SSH som default-transport
Vurderer å ta i bruk serverspec som lib
5. Referanser
og linker
Tekster
The Clean Coder: A Code of Conduct for Professional
Programmers ( )
: Promises, Lies and Dry-Run Mode ( )
: Testing your infrastructure ( )
: Automated infrastructure testing ( )
: Puppet at GitHub ( | )
: Puppet module testing ( )
Kode
Tools for writing fast unit tests for puppet
Framework for running integration tests in
an isolated environment
Book
Sean OMeara Blog
Andrew Crump Blog
Ranjib Dey Slides
Will Farrington Video Slides
Jan Vansteenkiste Slides
Fizzgig
Test Kitchen
Hire me!
no.linkedin.com/in/beddari

More Related Content

Similar to Ikke test Puppet-koden din

Presentation Mapreduce Bjornnordlund
Presentation Mapreduce BjornnordlundPresentation Mapreduce Bjornnordlund
Presentation Mapreduce Bjornnordlund
Bjørn Nordlund
 
Objektorientering og design av kode
Objektorientering og design av kodeObjektorientering og design av kode
Objektorientering og design av kode
Rune Sundling
 
Java 推荐读物与源代码阅读
Java 推荐读物与源代码阅读Java 推荐读物与源代码阅读
Java 推荐读物与源代码阅读
yiditushe
 

Similar to Ikke test Puppet-koden din (20)

Smidig 2011 TDD Workshop
Smidig 2011 TDD WorkshopSmidig 2011 TDD Workshop
Smidig 2011 TDD Workshop
 
Javascript tar hevn
Javascript tar hevnJavascript tar hevn
Javascript tar hevn
 
Ikt Fagforum - Presentasjon Av Autentiseringsprosjektet
Ikt Fagforum - Presentasjon Av AutentiseringsprosjektetIkt Fagforum - Presentasjon Av Autentiseringsprosjektet
Ikt Fagforum - Presentasjon Av Autentiseringsprosjektet
 
Intro to Azure DevOps
Intro to Azure DevOpsIntro to Azure DevOps
Intro to Azure DevOps
 
Introduksjon til TDD
Introduksjon til TDDIntroduksjon til TDD
Introduksjon til TDD
 
Presentation Mapreduce Bjornnordlund
Presentation Mapreduce BjornnordlundPresentation Mapreduce Bjornnordlund
Presentation Mapreduce Bjornnordlund
 
Meetup #7, Laravel intro, og design/GUI
Meetup #7, Laravel intro, og design/GUIMeetup #7, Laravel intro, og design/GUI
Meetup #7, Laravel intro, og design/GUI
 
Solide systemer med unit of work
Solide systemer med unit of workSolide systemer med unit of work
Solide systemer med unit of work
 
Introduksjon til Spring Boot
Introduksjon til Spring BootIntroduksjon til Spring Boot
Introduksjon til Spring Boot
 
Objektorientering og design av kode
Objektorientering og design av kodeObjektorientering og design av kode
Objektorientering og design av kode
 
Blazor - en kjapp intro
Blazor - en kjapp introBlazor - en kjapp intro
Blazor - en kjapp intro
 
Bli kjent med PostgreSQL!
Bli kjent med PostgreSQL!Bli kjent med PostgreSQL!
Bli kjent med PostgreSQL!
 
Slik kan du prototype enkelt med node red
Slik kan du prototype enkelt med node redSlik kan du prototype enkelt med node red
Slik kan du prototype enkelt med node red
 
Dnssec 2015
Dnssec 2015Dnssec 2015
Dnssec 2015
 
Java 推荐读物与源代码阅读
Java 推荐读物与源代码阅读Java 推荐读物与源代码阅读
Java 推荐读物与源代码阅读
 
Bygg applikasjonen din testbar
Bygg applikasjonen din testbarBygg applikasjonen din testbar
Bygg applikasjonen din testbar
 
Soa Runtime
Soa RuntimeSoa Runtime
Soa Runtime
 
Devops eller dø!
Devops eller dø!Devops eller dø!
Devops eller dø!
 
Progressive web applications i praksis
Progressive web applications i praksisProgressive web applications i praksis
Progressive web applications i praksis
 
Meetup 9 i KristansandPHP
Meetup 9 i KristansandPHPMeetup 9 i KristansandPHP
Meetup 9 i KristansandPHP
 

Ikke test Puppet-koden din