Ermitteln der IP-Konfiguration

Dieses Beispiel zeigt, wie man die IP-Konfiguration aus der Datei /etc/sysconfig/network/ifcfg-eth0 (bei SLES) bzw. (bei Redhat) /etc/sysconfig/networking-scripts/ifcfg-eth0 auslesen kann. Es gibt dazu verschiedene Möglichkeiten; für die, die fit auf der BASH sind, ist es ggf. ein guter Einstieg in den Umgang mit CFEngine, die BASH Kommandos in ein Promise einzubauen:

bundle agent getIPcfg
{
vars:
  "gateway" string => execresult("ip route | awk '$1 == \"default\" {print $3}'","useshell");
  "ipaddr" string => execresult("ip a s eth0 | grep inet | awk '{ print $2 }' | sed -e s/.*:.*// | awk -F '/' '{print $1}'","useshell");
  "submask" string => execresult("ip a s eth0 | grep inet | awk '{ print $2 }' | sed -e s/.*:.*// | awk -F '/' '{print $2}'","useshell");

reports:
 SLES11_4::
 "default gateway: $(gateway)";
 "ip address: $(ipaddr)";
 "subnet mask: $(submask)";
}

Im (agent-)Bundle getIPcfg (es gibt auch andere Bundle-Typen) werden unter "vars:" drei Variablen vom Typ String definiert: "gateway", "ipaddr" und "submask". In die Variablen wird jeweils der Rückgabewert bzw. das Ausführungsresultat (exec(ution)result) der BASH-Kommandos geschrieben.
In dem reports-Abschnitt geben wir den Inhalt der drei Variablen aus und schreiben jeweils noch davor, was es ist. Die Reports werden nur auf SuSE-Linux-Enterprise-Servern der Version 11 mit Service Pack 4 ausgegeben, um hier ein weiteres Beispiel für classes als Fallunterscheider aufzuzeigen.
Die Reports sieht man bei der seperaten Ausführung des Promises mit cf-agent -KIvf nur mit den Optionen I und v. Weiter tauchen die Reports im Syslog /var/log/messages auf.

Diese Art und Weise, die BASH-Kommandos im Promise zu verwenden, funktioniert, nutzt aber weder die Möglichkeiten der CFEngine noch entspricht sie der Denkweise. Um die Vorteile der "CFEngine Art und Weise" zu verstehen, ermitteln wir im nächsten Beispiel die IP-Information mit in CFEngine zur Verfügung stehenden Funktionen und nutzen diese direkt dazu, automatisch das ifcfg-Konfigurationsfile zu generieren.