Ersten Code schreiben (“Hello World”) 📝
Lass uns Puppet befehlen, eine Datei zu erstellen. Nicht manuell, sondern über Code.
- In den Ordner mit “Manifests” wechseln (das sind Anweisungen für Puppet):
cd /etc/puppetlabs/code/environments/production/manifests- Die Hauptdatei
site.pperstellen:
sudo nano site.pp- Diesen Code einfügen (das ist die Puppet DSL-Sprache):
file { '/tmp/hello_vitaliy.txt':
ensure => present,
content => "Hello! This is my first file, created through Puppet.\n",
mode => '0644',
}(Wir sagen: “Ich möchte, dass die Datei /tmp/hello_vitaliy.txt existiert, mit folgendem Inhalt”).
-
Speichern (
Ctrl+O,Enter,Ctrl+X). -
Die Magie anwenden: Agent starten:
sudo puppet agent -tWenn du Notice: /Stage[main]/Main/File[/tmp/hello_vitaliy.txt]/ensure: created siehst, hat Puppet selbst die Datei erstellt!
Du kannst prüfen: cat /tmp/hello_vitaliy.txt.
Auf Client anwenden
1. Auf den Linux-Server gehen: Haupt-Manifest-Datei öffnen:
sudo nano /etc/puppetlabs/code/environments/production/manifests/site.pp2. Diesen Code hinzufügen: (Altes löschen, wenn da, oder am Ende ergänzen).
node 'srv-dc01.vbo.local' {
file { 'c:/hello_from_linux.txt':
ensure => present,
content => "Hello, Windows! I am managing you from Linux.\n",
}
}Wichtig: Name srv-dc01.vbo.local. Er muss genau mit dem Client-Namen übereinstimmen.
3. Datei speichern (Ctrl+O, Enter, Ctrl+X).
4. Auf den Client gehen und anwenden: In PowerShell erneut eingeben:
puppet agent -tWenn du File[c:/hello_from_linux.txt]/ensure: created siehst, renn zu Laufwerk C:\. Dort sollte eine Datei erschienen sein! 📄
Benutzer erstellen 👤
Textdateien erstellen ist Übung. Admins verwenden Puppet, um Benutzer zu verwalten, Programme zu installieren und Dienste zu starten. Lass uns Puppet befehlen, einen neuen Benutzer auf deinem Client zu erstellen und ihm Rechte zu geben.
1. Auf dem Linux-Server: site.pp wieder öffnen:
sudo nano /etc/puppetlabs/code/environments/production/manifests/site.pp2. Code ändern: Entweder den alten file-Block löschen oder einfach einen neuen unten hinzufügen. Das eingeben (auf das Passwort achten — Windows verlangt ein komplexes!):
node 'srv-dc01.vbo.local' {
user { 'pup_admin':
ensure => present,
password => 'SuperSecretPass123!',
groups => ['Administrators'],
comment => 'Admin, created via Puppet',
managehome => true,
}
}(Dieser Code sagt: “Ich möchte Benutzer pup_admin mit diesem Passwort, und er soll in der Gruppe Administratoren sein”).
3. Speichern (Ctrl+O, Enter, Ctrl+X).
4. Auf Windows Server: Anwendungsbefehl ausführen:
puppet agent -tSoftware installieren (Windows zum Webserver machen) 🌐
Benutzer erstellen ist langweilig. Lass uns einen echten Dienst installieren. Wir verwandeln deinen Windows Server 2022 in einen Webserver (IIS), damit er Websites anzeigen kann. In Puppet gibt es fertige “Module” (wie Plugins). Um aber die Installation von Modulen jetzt nicht zu verkomplizieren, machen wir das über einen PowerShell-Befehl, eingebettet in Puppet.
1. Damit Puppet PowerShell-Befehle ausführen kann, braucht es eine offizielle Erweiterung. Auf dem Linux-Server ausführen:
sudo /opt/puppetlabs/bin/puppet module install puppetlabs-powershell
2. Auf dem Linux-Server: site.pp öffnen:
sudo nano /etc/puppetlabs/code/environments/production/manifests/site.pp3. IIS-Installationsaufgabe hinzufügen: Diesen Block innerhalb node 'srv-dc01.vbo.local' { ... } einfügen. Achtung: Nicht löschen, einfach unterhalb der Benutzererstellung hinzufügen, aber vor der schließenden Klammer }.
# Aufgabe 3: Server zum Webserver (IIS) machen
exec { 'Install-IIS':
command => 'Install-WindowsFeature -Name Web-Server -IncludeManagementTools',
provider => powershell,
# Diese Magie prüft: "Wenn IIS bereits installiert ist, nichts tun"
onlyif => 'if ((Get-WindowsFeature -Name Web-Server).InstallState -eq "Installed") { exit 1 } else { exit 0 }',
logoutput => true,
}4. Speichern und beenden.
5. Auf Windows ausführen:
puppet agent -tWebsite ersetzen 🎩🐇
Das standardmäßige blaue Bild ist langweilig. Lass uns beweisen, dass wir diesen Server vollständig besitzen. Wir ersetzen die Hauptseite der Website mit unserer eigenen, ohne Windows zu betreten.
1. Auf dem Linux-Server: site.pp öffnen:
sudo nano /etc/puppetlabs/code/environments/production/manifests/site.pp2. Neuen Code hinzufügen: Innerhalb des node 'srv-dc01.vbo.local'-Blocks, unterhalb der IIS-Installation, diese Zeilen ergänzen:
# Aufgabe 4: Standard-IIS-Startseite entfernen
file { 'c:/inetpub/wwwroot/iisstart.htm':
ensure => absent,
}
# Aufgabe 5: Eigene Website erstellen
file { 'c:/inetpub/wwwroot/index.html':
ensure => present,
content => "<html>
<body style='background-color: black; color: green; font-family: monospace;'>
<h1>MISSION ACCOMPLISHED</h1>
<p>This site was captured and is managed via Puppet!</p>
<p>Vitaliy + Gemi = Dream Team 🚀</p>
</body>
</html>",
}3. Speichern (Ctrl+O, Enter, Ctrl+X).
4. Auf Windows: Änderungen anwenden:
puppet agent -tProfi-Stil. IIS. (Module) 🏗️
Wir haben IIS auf dem “schmutzigen” Weg installiert — über einen PowerShell-Befehl (exec). Das funktioniert, aber das ist nicht der Puppet Way.
Schritt 1. “Treiber” für IIS herunterladen (Auf Linux-Server) 🧩
Wir brauchen das offizielle Modul von PuppetLabs, das dem Server beibringt, IIS zu verwalten. Auf Linux eingeben:
sudo /opt/puppetlabs/bin/puppet module install puppetlabs-iis
sudo /opt/puppetlabs/bin/puppet module install puppetlabs-pwshlibDu solltest sehen: Notice: Installing -- do not interrupt ... Und am Ende: └─ puppetlabs-iis (v...).
Schritt 2. Code neu schreiben 📝
Jetzt das Interessanteste. Wir löschen das hässliche PowerShell-Stück und ersetzen es durch die elegante Ressource iis_feature.
- Datei öffnen:
sudo nano /etc/puppetlabs/code/environments/production/manifests/site.pp- Den Inhalt des
node-Blocks vollständig ersetzen mit diesem Code:
node 'srv-dc01.vbo.local' {
# --- Block 1: Benutzer (wie bisher) ---
user { 'pup_admin':
ensure => present,
password => 'SuperSecretPass123!',
groups => ['Administrators'],
managehome => true,
}
# --- Block 2: IIS (PROFI-STIJL) ---
# Statt exec verwenden wir die native Ressource des Moduls
iis_feature { 'Web-Server':
ensure => present,
include_management_tools => true,
}
# --- Block 3: Website ---
# Alte Platzhalterseite entfernen
file { 'c:/inetpub/wwwroot/iisstart.htm':
ensure => absent,
}
# Unsere Website
file { 'c:/inetpub/wwwroot/index.html':
ensure => present,
content => "<html>
<body style='background-color: black; color: green; font-family: monospace;'>
<h1>MISSION ACCOMPLISHED</h1>
<p>This site was created with Gemini and Puppet!</p>
<p>Vitaliy + Gemi = Dream Team 🚀</p>
</body>
</html>",
}
}- Speichern (
Ctrl+O,Enter,Ctrl+X).
Schritt 3. Test auf Windows 🧪
Wichtig: IIS ist bereits installiert.
- Ein dummer Skript würde versuchen, ihn erneut zu installieren und einen Fehler ausgeben.
- Das smarte Modul prüft: “Aha, Web-Server ist bereits vorhanden. Management-Tools auch. Also tue ich nichts.” Auf Windows ausführen:
puppet agent -tZweite Website auf Port 8080 🏗️
Wir verwenden die Ressourcen iis_site und iis_application_pool. Das ist der Grund, warum wir das Modul installiert haben.
1. Auf dem Linux-Server ausführen:
sudo /opt/puppetlabs/bin/puppetserver gem install ruby-pwsh
sudo systemctl restart puppetserver2. Auf dem Linux-Server: site.pp öffnen:
sudo nano /etc/puppetlabs/code/environments/production/manifests/site.pp3. Diesen Code INNERHALB des node-Blocks hinzufügen: (Am Ende hinzufügen, vor der schließenden geschweiften Klammer }).
# --- Block 4: Neue Website "Secret Project" auf Port 8080 ---
# 1. Ordner für neue Website erstellen
file { 'c:/inetpub/secret_site':
ensure => directory,
}
# 2. Datei ablegen
file { 'c:/inetpub/secret_site/index.html':
ensure => present,
content => "<h1>SECRET AREA 51</h1><p>Zugang nur für Vitaliy und Gemi.</p>",
}
# 3. Application Pool erstellen (für Prozess-Isolation — Best Practice)
iis_application_pool { 'SecretPool':
ensure => present,
state => 'started',
}
# 4. Die Website erstellen und an Port 8080 hängen
iis_site { 'SecretSite':
ensure => started,
physicalpath => 'c:\\inetpub\\secret_site',
applicationpool => 'SecretPool',
bindings => [
{
'protocol' => 'http',
'bindinginformation' => '*:8080:',
}
],
require => File['c:/inetpub/secret_site'], # Erst Ordner, dann Website!
}
# 5. Port in der Firewall öffnen (sonst kein Zugriff von außen)
exec { 'Open-Port-8080':
command => 'New-NetFirewallRule -DisplayName "Puppet-8080" -Direction Inbound -LocalPort 8080 -Protocol TCP -Action Allow',
provider => powershell,
onlyif => 'if (Get-NetFirewallRule -DisplayName "Puppet-8080" -ErrorAction SilentlyContinue) { exit 1 } else { exit 0 }',
}4. Speichern und beenden.
5. Auf Windows: Agent starten:
puppet agent -t