Thomas Gelf www.netways.de



Ähnliche Dokumente
KONFIGURATIONSMANAGEMENT MIT PUPPET TIM SCHMELING. 4b:65:72:73:74:69:6e:2c:20:69:63:68:20:6c:69:65:62:65:20:64:69:63:68:21

Puppet Univention - CeBIT. Thomas Gelf

Systemmanagement mit Puppet und Foreman

Puppet Kickstart. Nürnberg, Referent: Thomas Gelf

Zentrales Konfigurationsmanagement mit Puppet

Albert HAYR Linux, IT and Open Source Expert and Solution Architect. Open Source professionell einsetzen

Serverprovisioning in einer dynamischen Infrastruktur Systemmanagement LinuxTag 2012

Management von grossen IT Umgebungen mit Open Source Tools

Infrastruktur entwickeln mit Chef

Automatisierte Serververwaltung mit Hilfe von Puppet

Entwicklungsumgebungen. Packer, Vagrant, Puppet. Alexander Pacnik Mannheim,

OP-LOG

Lokale Installation von DotNetNuke 4 ohne IIS

Wo finde ich die Software? - Jedem ProLiant Server liegt eine Management CD bei. - Über die Internetseite

Whitepaper. Produkt: List & Label 16. List & Label 16 unter Linux/Wine. combit GmbH Untere Laube Konstanz

Keine Angst vor Puppet 4. Secure Linux Administration Conference 2015 Martin Alfke

Anleitung über den Umgang mit Schildern

Data Center Automation mit Puppet

DevOps bei den ID Build-Automatisierung statt Silo-Betrieb

Kurzanleitung zur Softwareverteilung von BitDefender Produkten...2

SFTP SCP - Synology Wiki

Geschrieben von: Stefan Sonntag, den 26. Juni 2011 um 09:45 Uhr - Aktualisiert Sonntag, den 26. Juni 2011 um 10:12 Uhr

Titel. App-V 5 Single Server Anleitung zur Installation

Was meinen die Leute eigentlich mit: Grexit?

Q & A: Representation Tool

Thomas Wagner 2009 (im Rahmen der TA) Installation von MySQL 5.0 und Tomcat 5.5

In diesem Tutorial lernen Sie, wie Sie einen Termin erfassen und verschiedene Einstellungen zu einem Termin vornehmen können.

Matrix42. Use Case - Sicherung und Rücksicherung persönlicher Einstellungen über Personal Backup. Version September

Leitfaden zur ersten Nutzung der R FOM Portable-Version für Windows (Version 1.0)

Step by Step Webserver unter Windows Server von Christian Bartl

Benutzerinformation zum IP-Update: Wie aktualisiere ich meine IP-Adresse? Datenstand: / Version 1.0

WINDOWS 8 WINDOWS SERVER 2012

Er musste so eingerichtet werden, dass das D-Laufwerk auf das E-Laufwerk gespiegelt

Leichte-Sprache-Bilder

1. Loggen Sie sich mit Ihrem Benutzernamen in den Hosting-Manager (Confixx) auf Ihrer entsprechenden AREA ein.

WordPress lokal mit Xaamp installieren

Mein eigener Homeserver mit Ubuntu LTS

Installation SQL- Server 2012 Single Node

SharePoint Workspace 2010 Installieren & Konfigurieren

Einrichtung des WS_FTP95 LE

Kurzanleitung. MEYTON Aufbau einer Internetverbindung. 1 Von 11

Lehrveranstaltung Grundlagen von Datenbanken

Guide DynDNS und Portforwarding

Lineargleichungssysteme: Additions-/ Subtraktionsverfahren

Fragen zur GridVis MSSQL-Server

Netzwerkeinstellungen unter Mac OS X

Hex Datei mit Atmel Studio 6 erstellen

8. Bintec Router Redundancy Protocol (BRRP) 8.1 Einleitung

Wie richten Sie Ihr Web Paket bei Netpage24 ein

Geld Verdienen im Internet leicht gemacht

Installation der SAS Foundation Software auf Windows

MSSQL Server Fragen GridVis

Magento MultiStore einrichten unter ispcp

Control-M Workload Change Management 8

Artikel Schnittstelle über CSV

GEORG.NET Anbindung an Ihr ACTIVE-DIRECTORY

Welche Gedanken wir uns für die Erstellung einer Präsentation machen, sollen Ihnen die folgende Folien zeigen.

Konfiguration Firewall (Zyxel Zywall 10) (von Gruppe Schraubenmeier)

Agile Praktiken für das Service Transition Management. und wie IT Automation Ihre Service Transition Prozesse verändert - Change Management

Die neue Aufgabe von der Monitoring-Stelle. Das ist die Monitoring-Stelle:

Einführung in TexMaker

Anlegen eines virtuellen http Server unter Exchange 2003 mittels HOSTNAME

Open Source. Hendrik Ebbers 2015

Test mit lokaler XAMPP Oxid Installation

Installationsanleitung jk-ma011-1-hotel

Eine Anwendung mit InstantRails 1.7

Wir machen neue Politik für Baden-Württemberg

L10N-Manager 3. Netzwerktreffen der Hochschulübersetzer/i nnen Mannheim 10. Mai 2016

Benutzer und Rechte Teil 1

2. ERSTELLEN VON APPS MIT DEM ADT PLUGIN VON ECLIPSE

Upgrade-Leitfaden. Apparo Fast Edit 1 / 7

Folgende Voraussetzungen für die Konfiguration müssen erfüllt sein: - Ein Bootimage ab Version Optional einen DHCP Server.

PHPNuke Quick & Dirty

Moin! Ihr wollt wissen, was wir anders machen als alle anderen? Na dann blättert mal weiter...

Powershell DSC Oliver Ryf

Schnellstart - Checkliste

Switching. Übung 7 Spanning Tree. 7.1 Szenario

Liip.ch FAGILE LEADERSHIP

ONLINE-AKADEMIE. "Diplomierter NLP Anwender für Schule und Unterricht" Ziele

BEDIENUNG ABADISCOVER

Lizenzen auschecken. Was ist zu tun?

MO 27. Aug. 2007, 17:00 UHR JAVA FRAMEWORKS TIPPS VON PROFI-GÄRTNERN GEGEN WILDWUCHS

Lernerfolge sichern - Ein wichtiger Beitrag zu mehr Motivation

DER WING COMMANDER CD³² GUIDE

Umbenennen eines NetWorker 7.x Servers (UNIX/ Linux)

Anleitung zur Webservice Entwicklung unter Eclipse

1: 9. Hamburger Gründerpreis - Kategorie Existenzgründer :00 Uhr

Eingeschrieben?

Fotostammtisch-Schaumburg

WordPress installieren mit Webhosting

Lizenzierung von System Center 2012

Also heißt es einmal mehr, immer eine eigene Meinungen bilden, nicht beeinflussen lassen, niemals von anderen irgend eine Meinung aufdrängen lassen.

ELO Print&Archive so nutzen Sie es richtig

Flyer, Sharepics usw. mit LibreOffice oder OpenOffice erstellen

Adobe Photoshop. Lightroom 5 für Einsteiger Bilder verwalten und entwickeln. Sam Jost

Adminer: Installationsanleitung

Ein neues Outlook Konto können Sie im Control Panel über den Eintrag Mail erstellen.

So erstellen Sie nützliche Beschreibungen zu Ihren Tradingdaten

Transkript:

Puppen und Marionetten in der Deployment Pipeline 11.11.2013 Continuous Lifecycle 2013 Thomas Gelf www.netways.de

VORSTELLUNG

Kurzvorstellung: Thomas Gelf Seit 2010 Senior Consultant bei der NETWAYS GmbH in Nürnberg Zuvor über 10 Jahre: Web (Application) Development Routing/Switching (Banken und ISP-Backbone) ISP-Umfeld: Planung und Umsetzung hochverfügbarer Plattformen (Mail, Hosting, SIP-Carrier, IPv6...) Italienischer Staatsbürger deutscher Muttersprache, kurz:...südtiroler!!!

Puppet und Ich Wie alles begann: ADMIN-Magazin 06/2010 (Inhouse-)Trainings Consulting Und natürlich Vorträge zu Puppet: LinuxTag, OSDC, PuppetCamp, GUUG Frühjahrsgespräche, GridKa School, CeBIT...

Puppet und Netways Offizieller PuppetLabs Schulungs-Partner Termine für Puppet Fundamentals: 12. - 14. November 2013 Zürich 03. - 05. Dezember 2013 Nürnberg 21. - 23. Januar 2014 Nürnberg 01. - 03. April 2014 Düsseldorf 01. - 03. Juli 2014 Hamburg www.netways.de/training

Puppet und Netways Offizieller PuppetLabs Schulungs-Partner Termine für Puppet Advanced: 10. - 12. Dezember 2013 Hamburg 11. - 13. März 2014 Nürnberg 15. - 17. Juli 2014 Nürnberg www.netways.de/training

Puppet und Netways Offizieller PuppetLabs Schulungs-Partner Termine für Extending Puppet using Ruby: 15. - 17. Juli 2014 Nürnberg 09. - 11. September 2014 Nürnberg 21. - 23. Oktober 2014 Nürnberg www.netways.de/training

Es gibt Zertifizierungen! puppetlabs.com/services/certification

Puppet und Netways www.netways.de/puppetcamp Direkt nach der OSDC 2014 - erstmals in Berlin:

We are hiring! www.netways.de/jobs

AGENDA Einführung Puppet Komponenten Schnittstellen Deployment... MCollective Vagrant Tipps für simple Anpassungen Anregungen aus der Praxis

Was wir haben wollen Es geht um reproduzierbare Rollouts Realitätsnahe Entwicklungsumgebungen Testbare, versionierbare Systemplattformen Kurz: es geht um (eine Reihe von) Tools

WTF? STOP! Tools?? Agile Manifesto: 1. Individuals and interactions over processes and tools

My speech? It's all about the tools. Mein Job heute? Coole Tools zeigen Euer Job: herausfinden, mit welchen ihr spielen wollt

Continuous Delivery VS -Deployment Kurz: wer darf den Magic Button drücken? Der Chef? Jeder Entwickler eigenverantwortlich? Der Kunde? Der CI-Server? Aus Operating-Sicht ist mir das erst mal egal.

Reißt die Mauern ein! Dev und Ops - die ewige Hassliebe DevOps ist ein Riesen Tamtam rund um die Erkenntnis, dass es durchaus Sinn macht wenn Entwickler und Sysadmins miteinander REDEN...Reden verhindert aber nicht automatisch das berühmte "Code über die Mauer werfen"...

In zwei Jahren......treibe ich höchstpersönlich die nächste Sau durchs Dorf: Continuous Beerification Denn eins ist sicher: bei einem guten Bier kann man noch viiiiel besser REDEN. PROST!

Agile Entwicklung Nicht vergessen, worum's geht! Most of what we call management consists of making it difficult for people to get their work done Peter F. Drucker (1909-2005), Management Consultant

Die wichtigsten Tools im Operating Konfiguration-Management (Puppet): "baut Server" Monitoring, Beispiele: Icinga Logstash Graphite...was auch immer Aber ohne macht das alles keinen Sinn CI -Tool: prüft CVS, baut, lässt Tests laufen

NA GUT. WOZU PUPPET?

Ein Linux/Unix-System verwaltet man... Mit Kommandozeilentools Einem Texteditor Skript-Kenntnissen

Hat man viele solcher Systeme... Automatisiert man wiederkehrende Aufgaben Jeder hat seine so seine Skript-Sammlung in der Schublade Kann zum Problem werden

User anlegen per Shell-Script #! /bin/sh USER=$1; GROUP=$2; HOME=$3 if [ 0 -ne $(getent passwd $USER > /dev/null)$? ] then useradd $USER --home $HOME --gid $GROUP -n; fi OLDGID=`getent passwd $USER awk -F: '{print $4}'` OLDGROUP=`getent group $OLDGID awk -F: '{print $1}'` OLDHOME=`getent passwd $USER awk -F: '{print $6}'` if [ "$GROUP"!= "$OLDGID" ] && [ "$GROUP"!= "$OLDGROUP" ] then usermod --gid $GROUP $USER; fi if [ "$HOME"!= "$OLDHOME" ] then usermod --home $HOME $USER; fi

Selbiges mit Puppet user { 'elmo': ensure => present, gid => 'sysadmin', }

ÜBERREDET. PUPPET!

Eckdaten Hauptentwickler: Luke Kanies Puppet Labs, seit 2005 Lizenz: GPLv2 -> Apache Puppet Enterprise

Was ist Puppet eigentlich? Werkzeug für das Konfigurationsmanagement Automatisierungstool Anregung zum Reflektieren eigener Arbeitsweise Alle Systeme sind gleich. Oder? Abstraktionsschicht zwischen Admin und Systemen DevOps! In Ruby geschrieben

Ruby??? Hat nichts mit Ruby Rubacuori zu tun http://de.wikipedia.org/wiki/ruby-affäre Interpretierte, objektorientierte Sprache 1995 von Yukihiro Matsumoto entworfen

Der Mitbewerb bcfg2 cfengine chef ansible ssh & for-schleifen...

Welche Vorteile bietet Puppet? Reproduzierbarkeit Konsistenz Einfacher Einstieg Portabilität (Linux, Solaris, BSD...)

Warum ist Puppet anders? Deklarative Sprache (Puppet DSL) Bestimmt nicht Abläufe, sondern Zustände Ist plattformunabhängig (auch Windows!) Jeder Ressource-Typ kümmert sich selbst um plattformspezifische Besonderheiten Mit Puppet definiere ich, wie meine Systeme aussehen sollen und nicht, was sie dafür tun sollen

Puppet Community Plattformen: Redhat, Debian, Ubuntu, Solaris, Mac OSX... Weit über 100 Code beitragende Mitglieder 1000e aktive User auf Mailinglisten Nonstop 100e User auf IRC-Channeln Jeweils für Benutzer und für Entwickler

Puppet - Ablauf

Puppet - Architektur

Einfaches Beispiel # modules/ntp/manifests/init.pp: class ntp { package { 'ntp': ensure => installed } file { '/etc/ntpd.conf': source => 'puppet:///modules/ntp/ntpd.conf', require => Package['ntp'], notify => Service['ntpd'], } } service { 'ntpd': ensure => running, enable => true, }

Einfaches Beispiel - mal anders # modules/ntp/manifests/init.pp: class ntp { package { 'ntp': ensure => installed } -> file { '/etc/ntpd.conf': source => 'puppet:///modules/ntp/ntpd.conf', } } ~> service { 'ntpd': ensure => running, enable => true, }

Der Ablauf nochmal

Zuweisung von Rollen Die Node-Definition: # manifests/nodes.pp: node 'appserver1.domain.tld' { include ntp include applikation_xy }

Node-Definition eleganter Es geht auch bequemer, externe Klassifizierung External Node Classifier, z.b. Anbindung CMDB Schnittstelle zu bestehenden Tools Oder dedizierte Oberflächen: theforeman.org Puppet Enterprise Console Mittlerweile viel eleganter: Hiera!

Und dann? Reporting Will man haben! Puppet Enterprise Console Foreman (theforeman.org)

Enterprise?

Enterprise: Live Management

Open Source Software Unabhängig von PE......ist und bleibt Puppet aber freie Software! Hat eine riesige Community

Puppet Module Forge Bereits über 1700 Module Nutzt es als Inspirationsquelle!

Architektur - Übersicht Source: Puppetlabs

Fakten, Fakten, Fakten facter Standalone-Tool Plattformübergreifend Ruby-Bibliothek System-Informationen Eigene facts sind problemlos möglich

Ressourcen Resource Abstraction Layer

Ressource-Typen kann man... Einfach nutzen Von Puppet Module Forge laden In Puppet DSL erstellen Mit Ruby schreiben und von Puppet verteilen lassen

Manifest? Im Sinne der Ladungsliste eines Schiffes "Was soll sich auf dem Schiff befinden?" Aber nicht: "Was müssen wir aufladen?"

Wie soll so ein Manifest aussehen? Hübsch. Syntax Highlighting vim-puppet Sich an die "Best Practices" zu halten ist eine gute Idee: http://projects.puppetlabs.com/projects/puppet/wiki Puppet lässt uns ziemlich freie Hand Alles in "Modules" packen Beispiele suchen! (http://forge.puppetlabs.com/ etc)

VIM??? Es gibt auch andere, für Eclipse z.b. Geppetto:

Ein Manifest im VIM:

Zuständigkeiten Puppets Aufgaben beginnen NACH dem Bare Metal Deployment: Source: Puppetlabs

ROLLOUT

Auspacken, loslegen Konfigurationsmanagement will mit Bedacht eingeführt werden Aber vorher: Rumspielen Ausprobieren Kennenlernen puppet apply!

Erfahrungen sammeln heißt Fehler begehen. H.G. Wells Ein kluger Mann macht nicht alle Fehler selbst. Er gibt auch anderen eine Chance. Winston Churchill

Schnelltest Es reicht eine einfache Textdatei (Endung.pp): node default { notice("hello Continuous Lifecycle! ) } # puppet apply test.pp notice: Scope(Node[default]): Hello Continuous Lifecycle! notice: Finished catalog run in 0.03 seconds Die Ausgabe findet sich später auf dem Master im Syslog, im genutzten Web-Frontend etc

Putting hands on... Einfache Manifeste Nützliche Kommandozeilenparameter Erste Klassen, Vererbung, Parameter, Module Einbinden von Drittmodulen Custom Facts Hiera

UND WIE WEITER?

Langsam anfangen, Step by Step: Erst langweiligen Kleinkram: NTP Vernünftiges Mailrouting (für Fehler in Cronjobs!) Logging Basis-Komponenten fürs Monitoring docs.puppetlabs.com/learning

Nicht übertreiben: Paketmanagement package { 'apache2': ensure => installed } Versionen zu spezifizieren ist möglich Wenn möglich Funktionen der Distro steuern (HOLD) Bitte sparsam einsetzen: package { 'xz-utils': ensure => '5.1.1alpha+20110809-3' }

Nicht übertreiben. Beispiel: Updates # Möglich: package { 'whatever': ensure => 'latest' } # Besser: case $osfamily { 'debian': { cron { 'autoupgrade': path => '/bin:/sbin:/usr/bin:/usr/sbin', command => 'apt-get update && apt-get upgrade', user => root, hour => 2, minute => ip_to_cron(), } } 'redhat': { package { 'yum-autoupdate': ensure => installed } } }

Alles muss in Module! Module sparen Tippaufwand durch Konvention Idealerweise sind sie dann zudem plattformunabhängig: $pkg = $osfamily? { 'redhat' => 'openssh', 'debian' => [ 'openssh-server', 'openssh-client' ], default => 'ssh' } package { $pkg: ensure => installed } VMware-Guests brauchen andere Pakete Container brauchen keinen nptd

DANN: REIHENFOLGE

Wir erinnern uns Es gibt kein top-down-ordering in Puppet Dieselbe Konfiguration kann bei zwei Durchläufen in unterschiedlicher Reihenfolge ablaufen (was seit Puppet 3 so nicht mehr gilt) Es werden gewünschte Zustände definiert, KEINE Abläufe Wollen wir dennoch Reihenfolgen definieren, nutzen wir sogenannte Metaparameter: require, before, subscribe, notify

Explizite Abhängigkeiten class ssh { package { 'openssh-server': ensure => installed, } file { '/etc/ssh/sshd_config': ensure => file, source => 'puppet:///modules/ssh/sshd_config', mode => 0644, owner => 'root', group => 'root', require => Package['openssh-server'], notify => Service['ssh'], } } service { 'ssh': ensure => running, enable => true, }

Kurzschreibweise Package['openssh-server'] -> File['sshd_config'] ~> service { 'ssh': ensure => running, enable => true, } Nutzbar für bereits deklarierte Ressourcen......oder direkt beim Deklarieren derselben

Implizite Abhängigkeiten File { owner => 'user1', group => 'group1', require => [ User['user1'], Group['group1'] ], } file { '/tmp/test': ensure => directory } file { '/tmp/test/file': ensure => file, require => File['/tmp/test'], } User['user1'] { gid => 'group1', require +> Group['group1'], } group { 'group1': ensure => present }

Noch eleganter: Run Stages

Run Stages: Beispiel class yumrepos { $url = "http://host/repo/$operatingsys../$architecture" } yumrepo { 'meinrepo': baseurl => $url, descr => 'Mein repository', enabled => 1, gpgcheck => 0, } stage { 'yum': before => Stage['main'] } node /^www\d+/ { class { 'yumrepos': stage => yum } include webserver include dbserver }

Wichtige Regeln zu Abhängigkeiten Je weniger Abhängigkeiten desto besser Abhängigkeiten von anderen Modulen/Klassen sind OK Abhängigkeiten von Ressourcen in anderen Klassen: Zwischen Modulen unbedingt vermeiden Innerhalb eines Moduls unter Umständen sinnvoll Kurz: Hängt stark vom Moduldesign ab Und wenn ein Dependency-Cycle mal unklar ist: puppet apply --graph

SYSTEMÜBERGREIFENDE CONFIG

Beispiele Load Balancer und Applikationsserver Cluster und Mitglieder Monitoring-Server und überwachte Anwendungen Anwendungen und remote Datenbanken Verteilung von "known hosts" oder /etc/hosts Konfiguration von Backup-Jobs

Lösung: exportierte Ressourcen

Exportierte Ressourcen - Beispiel I Webanwendung will von Monitoring-Server remote überwacht werden: class webserver { package { 'apache2': ensure => installed } } @@nagios_service { "check_http_$fqdn": use => "check_http", host_name => $fqdn, target => "/etc/icinga/objects/check_http_$fqdn.cfg", } class icinga { Nagios_service << >> }

Exportierte Ressourcen - Beispiel II Webanwendung exportiert gewünschte Datenbank: @@mysql::db { 'lifecycle': user => 'conference', password => '2013', host => $ipaddress, grant => ['all'], tag => 'web_db' } Datenbank-Server setzt sie um: Mysql::Db << tag == 'web_db' >>

Exportierte Ressourcen - Beispiel III Noch kompakter: /etc/hosts class hosts { @@host { $fqdn: ip => $ipaddress, host_aliases => $hostname, } Host << >> }

Voraussetzungen Stored Configurations (waren früher sehr langsam!) storeconfigs VS PuppetDB Neue Architektur Graphen können abgebildet werden Message Queue Java-Daemon Kann bei Bedarf auch viele Cores auslasten

Wichtig: aufräumen! Puppet kann nicht wissen, ob ein Host: nur vorübergehend down ist......oder aber gar nicht mehr existiert Config: node-ttl-days CLI: puppet node deactivate host1.example.com

Zu umständlich? Zu wenig? Wenn exportierte Ressourcen zu starr sind: # Array aller aktiven Knoten mit Uptime > 30 Tagen # und zugewiesener Klasse Apache: $ret = pdbnodequery( ['>',['fact','uptime_days'],30], ['and', ['=','type','class'], ['=','title','apache']]) https://github.com/dalen/puppet-puppetdbquery Noch mehr? Orchestration, Marionette Collective!

ORCHESTRATION: MCOLLECTIVE

Was ist Marionette Collective? MQ-basierte Software zur Steuerung unserer Server Protokoll: STOMP Puppet-Runs on-demand Parallele manuelle Steuerung von Ressourcen on-the-fly Eigene Agenten super-einfach in Ruby umsetzbar

Einfach mal HALLO sagen... % mco ping dev8 dev6 dev10.. time=126.19 ms time=132.79 ms time=133.57 ms ---- ping statistics ---- 25 replies max: 305.58 min: 57.50 avg: 113.16

Wir stoppen......den Apache......auf allen Debian-basierten Servern......denen wir die Anwendung 'webappxy' zugewiesen haben: mco rpc service stop service=apache2 \ --with-fact osfamily=debian \ --with-class role::webappxy

Was machen wir nun damit? MCollective ist nur ein Framework Mit den mitgelieferten Agenten kommt man nicht weit Eigene Agenten schreiben ist aber simpel Schöne Praxisbeispiele: mco grep, mco job

Fazit zu MCollective Solltet ihr unbedingt einfach mal ausprobieren Genial, um Migrationen in verteilten Umgebungen zu skripten WICHTIG: Nicht einsetzen, ohne verstanden zu haben wie die MQ tickt......und Security-Fragen geklärt zu haben!

SCHNITTSTELLEN - ENC

Unsere Node-Definitionen Werden eigentlich im Manifest definiert (site.pp) node 'some-server.domain.tld' { include baseconfig include webserver } node 'www1.domain.tld' inherits 'some-server.domain.tld' { include my-webapp } node /^www\d+\.domain\.tld$/ { include baseconfig class {'webserver': type => 'apache', version => '2.4' } } node default { include unconfigured }

Vor- und Nachteile textbasierter Nodes Wunderbar in Kombination mit GIT, SVN & Co Nicht so wunderbar für GUI-Integration Rollenzuweisungen ändern sich häufiger als Modul-DSL Text-Dateien sind fehleranfälliger (Klammern, Regex-Fehler!)

ENC Konfiguration http://docs.puppetlabs.com/guides/external_nodes.html Parametrisierbare Klassen seit 2.6.5 External Node Classifier: [master] node_terminus = exec external_nodes = /usr/local/bin/my_node_classifier

ENC Ausgabe Muss YAML sein: --- classes: baseconfig webserver type: Apache version: 2.4 parameters: global_var: foo global_array: - foo - bar environment: production

Beispiel in Perl #!/usr/bin/perl use YAML; my $hostname = $ARGV[0]; # Unsere "CMDB": my $result = { 'classes' => { 'baseconfig' => { 'datacenter' => 'Nuremberg' }, 'webserver' => { 'type' => 'apache', 'version' => '2.4' } }; } print YAML::Dump($result);

SCHNITTSTELLEN - LOOKUPS

extlookup() Gibt es seit 2009, "offiziell" seit Puppet 2.6.1 extdata -> CSV $relay_host = extlookup('relay_host', 'default-relay.tld') some-host.tld.csv: relay_host,datacenter2.domain.tld common.csv: relay_host,datacenter1.domain.tld # Sind im Grunde globale Variablen!! $extlookup_datadir = "/etc/puppet/manifests/extdata" $extlookup_precedence = ["%{fqdn}", "common"] $relay_host = extlookup('relay_host')

Hiera!

Hiera - backends

Hiera! Vor Puppet 3: class apache($version = hiera('apache::version', '2.4')) Mit Puppet 3: class apache($version = hiera('version', '2.4'))...oder noch besser, mittels 'data bindings': class apache($version = '2.4')

Hiera example --- cluster::config::members: application: 4 loadbalancer: 2 searchserver: 2 cluster::config::version: 1.0.2 application_server::domains: www.customer.tld: aliases: [ prod.customer.com ] allowed_webs: [ shop1, shop2 ] default_web: shop1 admin.customer.tld: allowed_webs: [ admin ] allowed_users: admin: somepassword customer: secret

Eigene functions und facts puppet master: (parser) functions puppet agent: facts Können und sollen in Modulen abgelegt werden Kann man via pluginsync verteilen Wird nicht in diesem Vortrag gezeigt

VAGRANT

Vagrant http://www.vagrantup.com 13:15 - Bastian Spanneberg (Raum Fidelitas) Nur ein paar Worte dazu...

DEPLOYMENT, INSTALLER

Puppet ohne Master Geht das? Natürlich. Wie? puppet apply Aber es geht noch besser! /usr/bin/puppet ist ein Ruby-Skript mit wenigen Zeilen......nichts hindert uns daran es zu duplizieren und ein paar Vorgaben in Stein zu meißeln. z.b. für einen Puppet-Installer, der keine Spuren hinterlässt

COOL. UND JETZT?

Alles zusammen, Anregungen und Anekdoten Puppet Agent mit Puppet konfigurieren git clone git://whatever.tld/puppet.git../puppet-install puppet

Alles zusammen, Anregungen und Anekdoten Puppet Master mit Puppet installieren puppet-install puppetmaster

Alles zusammen, Anregungen und Anekdoten MCollective gleich mitkonfigurieren FACTER_use_mcollective=1 puppet-install puppetmaster

Alles zusammen, Anregungen und Anekdoten Application-Server ausrollen mco -I /appserver/ puppet runonce

Alles zusammen, Anregungen und Anekdoten Eigene Classification-Logik puppet-install classify_by_hostname puppet-install classify_by_facts

Danke für eure Aufmerksamkeit!

Fragen? class continuous_lifecycle::conference { } service { 'questions': ensure => answered } Thomas Gelf <thomas.gelf@netways.de>