Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Continuous Lifecycle 2013: Mit Puppen spielen -...

Continuous Lifecycle 2013: Mit Puppen spielen - Testsysteme automatisieren mit Vagrant und Puppet

Slides zu meinem Vagrant/Puppet Talk auf der Continuous Lifecycle 2013 in Karlsruhe

Avatar for Bastian Spanneberg

Bastian Spanneberg

November 11, 2013
Tweet

More Decks by Bastian Spanneberg

Other Decks in Technology

Transcript

  1. codecentric AG ... > vagrant package > vagrant halt >

    vagrant destroy > vagrant provision
  2. codecentric AG Networking config.vm.network :forwarded_port, guest: 80, host: 8080 [,auto_correct:

    true] config.vm.network :private_network, ip: "192.168.50.4" config.vm.network :public network
  3. codecentric AG Multi VM Umgebungen config.vm.define "app01" do |app01| app01.vm.host_name

    = “app.local” app01.vm.box = "appserver­image" end config.vm.define "db01" do |db01| db01.vm.host_name = “db.local” db01.vm.box = "dbserver­image" end
  4. codecentric AG Provisioning (Shell) Vagrant.configure("2") do |config| config.vm.box = "precise64"

    config.vm.provision :shell, inline: "echo 'Vagrant was here!' > /etc/motd.tail" end
  5. codecentric AG Provisioning (Puppet) config.vm.provision :puppet do |puppet| puppet.manifests_path =

    "manifests" puppet.module_path = "modules" puppet.manifest_file = "site.pp" puppet.options = "..." end
  6. codecentric AG Puppet – Resourcen resource_type { 'name' : attribut1

    => wert1, attribut2 => wert2, … } • Zustandbeschreibung • Keine garantierte Reihenfolge • Idempotenz
  7. codecentric AG Puppet – Verbreitete Resourcen (1) file { '/etc/motd.tail'

    : ensure => present, owner => root, group => root, mode => 644, content => 'This machine is managed by Puppet' } • Für Files, Links, Directories • “source” für Verweis auf externe Dateien • Ruby Templates
  8. codecentric AG Puppet – Verbreitete Resourcen (2) package { 'apache2'

    : ensure => installed, } service { 'apache2' : ensure => running, require => Package['apache2'], }
  9. codecentric AG Puppet – Verbreitete Resourcen (3) group { 'foo'

    : ensure => present, } user { 'foo' : ensure => present, gid => 'foo', managehome => true, shell => '/bin/bash', }
  10. codecentric AG Puppet – Verbreitete Resourcen (4) exec { 'dl­tomcat'

    : command => '/usr/bin/wget … foo.tgz', cwd => '/tmp', creates => '/tmp/foo.tgz', } exec { 'unpack­tomcat' : command => '/bin/tar ­xzf …', unless => '/usr/bin/test ­d …', require => Exec['dl­tomcat'], }
  11. codecentric AG Puppet – Metaparameter type { 'foobar' : before

    => …, require => …, notify => …, subscribe => …, alias => …, } • Auf alle Typen anwendbar • Modellierung von Abhängigkeiten
  12. codecentric AG Puppet – Fakten, Klassen, Module, Nodes • Fakten

    → Infos über das System • Klassen → Gruppierung von Resourcen • Module → Wiederverwendung • Nodes → Beschreibung von Hosts → Demo
  13. codecentric AG Puppet - Forge → forge.puppetlabs.com > puppet module

    install mysql • Module für nahezu jeden Zweck • Guter Startpunkt zum Vertiefen
  14. codecentric AG Puppet – Best Practice • Komma nach den

    Attributes • Einrückung. Spaces. • Execs vermeiden! • Pakte verwenden wenn möglich • Lohnt sich ein eigenes Paket? • Potentiale für Wiederverwendung finden
  15. codecentric AG Next step: Infrastruktur-Projekt ./modules/ ./manifests/ ./hiera/common.yaml ./hiera/local.yaml ./hiera/test.yaml

    ./hiera/staging.yaml ./Vagrantfile • Grundlage für Zusammenarbeit mit Betrieb • Reviews. Pair Programming. DevOps-Kultur :)
  16. codecentric AG Next interesting steps • Puppetmaster • Dashboards: The

    Foreman, Puppet Enterprise • mcollective • Puppet + rspec • Vagrant Cloud Provider (AWS, OpenStack) • Vagrantfile = Ruby-Skript • Custom Facts + Function mit Ruby
  17. codecentric AG Danke! Fragen? • Wir suchen Kollegen! • Karlsruhe

    :) • München • Hamburg • Frankfurt • Berlin • Düsseldorf • Solingen