Puppet
Puppet ist ein Konfigurationsmanagement-Tool, das einem Master-Slave-Prinzip folgt. Der gewünschte Zustand eines Systems wird in einer deklarativen Sprache beschrieben. Damit legen Admins den gewünschten Endzustand fest – nicht, wie dieser zu erreichen ist (Idempotenz). Die Definitionen für die verwalteten Systeme liegen in sogenannten Manifesten auf dem Puppet Master.
Auf den Clients läuft ein Agent, der in regelmäßigen Abständen beim Master den gewünschten Zustand erfragt und Abweichungen korrigiert. Configuration Drifts, wenn beispielsweise User lokale Änderungen vorgenommen haben und das System somit nicht mehr im gewünschten Zustand ist, werden beim nächsten Lauf des Agents automatisch korrigiert. Die Bandbreite der möglichen Kommandos reicht vom Erzeugen und Modifizieren einzelner Dateien über das Verwalten von User Accounts und Softwarepaketen zu komplexeren Aufgaben.
Manifeste und dynamische Dateivorlagen (Templates) werden in Ruby bzw. einer an Ruby orientierten Syntax verfasst und folgen einem strengen Klassenkonzept. Parameter für die Manifeste werden entweder in einer Datenbank auf dem Puppet Master vorgehalten oder dynamisch von einem External Node Classifier wie einem Datacenter Inventory Management (DCIM) oder einer Configuration Management Database (CMDB) abgefragt.