Puppenspieler

Für unser Freifunk-Setup versuche ich mich derzeit verstärkt mal wieder daran, puppet-Code zu fabrizieren. Eine undankbare Aufgabe …

Was mich an puppet ja seit Anbeginn stört, ist die Asynchronität: die Reihenfolge der Kommandos ist vorher unklar, klar ist nur, daß alle Aufgaben erledigt werden — und sei es erst im, extern getriggerten, dritten oder dröflten Anlauf …

Aktuell führt das zu wenig lustigen Seiteneffekten: während es bei der IPv4-Konfiguration für bird noch, zufällig, nutzbaren Code gibt …

root@bgp2:~# grep ^include /etc/bird/bird.conf
include "/etc/bird/bird.conf.d/ffgt.conf";
include "/etc/bird/bird.conf.d/ospf-ffgt.conf";
include "/etc/bird/bird.conf.d/icvpn-template.conf";
include "/etc/bird/bird.conf.d/uplink.conf";
include "/etc/bird/bird.conf.d/icvpn-peers.conf";

… ergibt sich für IPv6 leider unbrauchbarer Datenmüll:

root@bgp2:~# grep ^include /etc/bird/bird6.conf
include "/etc/bird/bird6.conf.d/icvpn-template.conf";
include "/etc/bird/bird6.conf.d/icvpn-peers.conf";
include "/etc/bird/bird6.conf.d/ospf6-ffgt.conf";
include "/etc/bird/bird6.conf.d/uplink.conf";
include "/etc/bird/bird6.conf.d/ffgt.conf";

Da in »ffgt.conf« Definitionen stehen, auf die z. B. in ospf6-ffgt.conf zurückgegriffen werden soll, klappt das natürlich nicht — die Reihenfolge ist einfach Müll :-(

Die Dateien 01-*, 02-* usw. zu nennen würde zwar für bird an sich funktionieren, sodaß ein »include “/etc/bird/bird6.conf.d/*.conf”« dies ggf. löste; nur würden dann ggf. auch Dateien übernommen, die halt schon da lagen — eigentlich auch nicht, was man will.

Klassischer Unix-Workaround also: es wird eine .include-Datei geschrieben, die jedesmal mit »sort« behandelt wird und eben danach schün sortiert ist. Heißt leider, daß alle schreibenden Routinen überarbeitet werden müssen — man gönnt sich ja sonst nichts.