• Willkommen im Linux Club - dem deutschsprachigen Supportforum für GNU/Linux. Registriere dich kostenlos, um alle Inhalte zu sehen und Fragen zu stellen.

[Gelöst] Verwendung eigener Variablen in Bacula-Config

gehrke

Administrator
Teammitglied
Moin *,

ich muss mal dringend meine Bacula-Konfiguration konsolidieren. Dafür brauche ich die Möglichkeit, selbstdefinierte Variablen in der Config zu verwenden. Ich finde aber leider nicht den richtigen Weg.

Zuletzt habe ich sowas hier versucht:
Code:
@|"sh -c 'export target=j11'"

Device {
  Name = disk1-${target}
  [...]
Das scheitert kläglich:
Code:
Feb 08 22:59:29 bacula.gehrke.local bacula-sd[16751]: 08-Feb 22:59 bacula-sd: ERROR TERMINATION at parse_conf.c:368
Feb 08 22:59:29 bacula.gehrke.local bacula-sd[16751]: Config error: Illegal character "$" in name.
Feb 08 22:59:29 bacula.gehrke.local bacula-sd[16751]: : line 4, col 16 of file |sh -c 'cat /etc/bacula/client-sd-*.conf'
Feb 08 22:59:29 bacula.gehrke.local bacula-sd[16751]: Name = disk1-${target}
Feb 08 22:59:29 bacula.gehrke.local systemd[1]: bacula-sd.service: main process exited, code=exited, status=1/FAILURE

Kann jemand helfen?
TNX

Glückauf, gehrke
 
OP
gehrke

gehrke

Administrator
Teammitglied
Ich habe mal massiv konsolidiert und vereinfacht. Zwar habe ich keine Möglichkeit gefunden, eigene Variablen direkt zu definieren, aber mein Ziel auf anderem Wege erreicht.

Eine Lösung hierzu hatte Michael Stapelberg schon 2007 erarbeitet und dankenswerterweise veröffentlicht:
https://michael.stapelberg.de/posts/2007-12-16-bacula_config/

Meine Lösung für die einzelnen Clients setzt sowohl bei Director- als auch bei Storage-Config an. Hier mal der Einfachheit halber nur die kleinere Fassung für den Storage.

Am Ende der bacula-sd.conf wird für jeden Client eine eigene Config eingelesen:
Code:
@|"sh -c 'cat /etc/bacula/client-sd-*.conf'"

Es existiert ein Template, welches die gewünschten Variablen via Platzhalter (im Beispiel '%target%') referenziert:
Code:
$ cat client-sd.inc 
Device {
  Name = disk1-%target%
  Media Type = File1
  Archive Device = /backup-pool/disk1/%target%
  @/etc/bacula/deviceDefinition.conf
}
Device {
  Name = disk2-%target%
  Media Type = File2
  Archive Device = /backup-pool/disk2/%target%
  @/etc/bacula/deviceDefinition.conf
}
Für jeden Client existiert ein Wrapper, welcher das Template aufruft und die Parameter per 'sed' setzt. Beispiel Client 'j10':
Code:
$ cat client-sd-j10.conf 
@"|sed 's/%target%/j10/g' /etc/bacula/client-sd.inc"

Das war es schon. Erweiterungen am Code erfolgen nun nur noch einmalig im Template, die Anzahl der Config-Zeilen ist massiv gesunken und das Anlegen eines neuen Clients sind nur noch zwei Einzeiler. Bin zufrieden...
 
Oben