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

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

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

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