Zend Server installieren/konfigurieren
Jetzt kommen wir zum nächsten Schritt. Der Zend Server wird installiert. Dazu legen wir ein neues Modul namens Zend_Server mit dem Inhalt aus Listing 3 in init.pp an.
Die eigentliche Klasse Zend_Server erbt vom Zend-Server-Repo-Modul und kann folglich auf dessen Funktionen referenzieren. Es wird erst sichergestellt, dass die Packages zend-pe und php5-extra-extensions-zend-pe installiert sind. Der Parameter require => [Yumrepo["zend"], Yumrepo["zend-noarch"]] stellt sicher, dass erst versucht wird, die Pakete zu installieren, wenn vorher die Repositories angelegt wurden. Puppet arbeitet nicht alle Manifeste einfach der Reihe nach ab, sondern achtet auf definierte Abhängigkeiten, die mit Parametern wie require oder before für jede Funktion definiert werden können. Der Service zend-server wird jetzt aktiviert und registriert. enable => true, und ensure => running führen die entsprechenden Startskripte aus und registrieren den Service zum automatischen starten beim nächsten Systemstart. Dabei prüft Puppet bei jeder Ausführung, ob der Service tatsächlich läuft oder nicht.
Puppet weiß, mit welchen Befehlen unter welcher Plattform es das tun muss. Unter Red Hat wird z. B. der Befehl service zend-server start und chkconfig zend-server on aufgerufen. Der Parameter has status => true gibt Puppet den Hinweis, dass das init-Skript dieses Service über eine Status-Funktion verfügt, welche zurückgibt, ob der Service aktuell läuft oder nicht. Falls keine Statusfunktion vorhanden ist, sucht Puppet im Prozessbaum nach einem Prozess, der den gleichen Namen trägt, wie der Service.
Der letzte Block in dem Manifest kopiert die Datei zend-server-user.ini an die dafür vorgesehene Stelle und setzt somit das Admin-Passwort für das Zend Server GUI. Somit werden alle Zend Server, die via Puppet konfiguriert werden, das gleiche Passwort erhalten und das Passwort kann nun an einer zentralen Stelle geändert werden, indem einfach die Datei /etc/puppet/modules/zend-server/files/zend-server-user.ini auf dem Puppet Master aktualisiert wird. Wenn dieses Manifest erstellt ist, muss es nur noch unter /etc/puppet/manifests/site.pp in die Base Class aufgenommen werden:
# /etc/puppet/manifests/site.pp
class baseclass {
include zend_server_repo,
zend_server
}
Jetzt kann der Puppet-Client zum zweiten Mal gestartet werden. Die Ausführung wird jetzt länger dauern, da jetzt der Zend Server effektiv heruntergeladen und installiert wird. Wenn dieser Vorgang abgeschlossen ist, hat man bereits einen fertig lauffähigen Zend Server am Start, was man durch Aufrufen des Server-URLs auf Port 10082 leicht überprüfen kann.
Das httpd.conf Template
Die volle Magie von Puppet kommt erst zum Vorschein, wenn man die mächtigen Templates zum Einsatz bringt. Mit Templates können generische Konfigurationsfiles mit Platzhaltern für dynamische Inhalte erstellt werden. Wichtig zu wissen ist, dass in Templates auf Werte zurückgegriffen werden kann, die durch das Tool Facter ermittelt werden. Facter wird zusammen mit Puppet installiert und ermittelt "Facts" über das Zielsystem, z. B. OS-Typ, Anzahl von CPUs oder eine IP-Adresse. Wenn man Facter ohne Parameter auf der Command-line aufruft, erhält man eine Liste aller erhobenen Facts (Kasten: Facter).
Facter
Facter erhebt Fakten über das Zielsystem und stellt diese Puppet zur Verfügung. Auf diese Facts kann man in Manifesten und Templates zugreifen. Facts können sehr hilfreich sein, um z. B. Memorylimits anhand des effektiv verfügbaren Speichers zu setzen oder entsprechend der verfügbaren CPU-Anzahl die Anzahl offener Prozesse des Apache zu definieren. Reichen die Facts nicht aus, können sie natürlich erweitert werden. Eine detaillierte Anleitung dazu findet sich hier.Folgende Facts stehen automatisch zur Verfügung:
- architecture => x86_64
- domain =>localdomain
- facterversion => 1.5.4
- fqdn => localhost.localdomain
- hardwareisa => x86_64
- hardwaremodel => x86_64
- hostname => localhost
- id => root
- interfaces => eth0,sit0
- ipaddress => 192.168.1.135
- ipaddress_eth0 => 192.168.1.135
- kernel => Linux
- kernelrelease => 2.6.18-92.el5
- kernelversion => 2.6.18
- lsbdistcodename => Final
- lsbdistdescription => CentOS release 5.3 (Final)
- lsbdistid => CentOS
- lsbdistrelease => 5.3
- lsbmajdistrelease => 5
- lsbrelease => :core-3.1-amd64:core-3.1-ia32:core-3.1-noarch:graphics-3.1-amd64:graphics-3.1-ia32:graphics-3.1-noarch
- macaddress => 00:50:56:1C:01:E1
- macaddress_eth0 => 00:50:56:1C:01:E1
- memoryfree => 709.75 MB
- memorysize => 1002.86 MB
- netmask => 255.255.255.0
- netmask_eth0 => 255.255.255.0
- network_eth0 => 192.168.1.135
- operatingsystem => CentOS
- operatingsystemrelease => 5.3
- physicalprocessorcount => 0
- processor0 => Intel(R) Core(TM)2 Duo CPU E6750 @ 2.66GHz
- processorcount => 1
- ps => ps -ef
- puppetversion => 0.24.8
- rubysitedir => /usr/lib/ruby/site_ruby/1.8
- rubyversion => 1.8.5
- sshdsakey => 44ms88Tojk+i0ww288zSzc1vXuxg/fwwSKc2VMk8hULteYbu
HkmTNw/So21/PsMtWN66GtEZ0j0ptvechpE+PoX+DILEGd0
Qa8KDLiuKtEmWCAAAAIBJx5a7CQMaFgW5iwrlClrkTzO28Qy
DpEPSZDDCbtNxw22mylwP18nain71SySCkVyu4EQtnCQ7fjR
aMytx718v3iJlqkZVTt0ey5i4vW6oZOmtdRoESnK0Vz9/fDtMl
DE9HArP/xLeYQ62Q3+HEFxgRveYowl5pboiUDSVgIS3TA== - sshrsakey => VZAXGDeAf2Qm5aQfLxZ6iIbXN6nKmo8KVsd6s/nwqHSmkT
LNL/Hq/M7zP32pvjU7bir/U1BR7D9ZDM0ov03mcTKGuJAwQp
+po3K8u7pF+6z4EWU4DS0vUVqaWXEHi2IjuG1m0Y9V2Gm
Ct11urqd+zSyQkpdOhQcf7xgj+A1JYPv9URxZV5XKu9tjyKzA
4RGHBsr4Lj6uH0+PMS9wJ5Jn95UOZk1kbQ9EVWM1LHsv4q
RPJG2Vw== - swapfree => 511.99 MB
- swapsize => 511.99 MB
- timezone => CEST
- uniqueid => 6e0af1cb
- uptime => 5:24 hours
- uptime_days => 0
- uptime_hours => 5
- uptime_seconds => 19496
- virtual => physical




