From: Matthijs Kooijman Date: Thu, 1 Jan 2009 14:02:23 +0000 (+0100) Subject: tools: Add a interpolate function that can interpolate % variables into a path. X-Git-Url: https://git.stderr.nl/gitweb?p=matthijs%2Fupstream%2Fbackupninja.git;a=commitdiff_plain;h=1775e74030da0071f8c49b60d076afdea06a8cd6 tools: Add a interpolate function that can interpolate % variables into a path. This allows handlers to turn a single path configuration variable into different paths, based on the vserver used. --- diff --git a/lib/tools.in b/lib/tools.in index 0005be9..fe7d54a 100644 --- a/lib/tools.in +++ b/lib/tools.in @@ -46,3 +46,46 @@ function getconf() { # because it is in an 'eval' statement. eval $1='$ret' } + +# +# Replaces escape sequences in $1 with the proper values for the vserver $2. +# The result is put on stdout. If $2 is empty, values for the host are +# replaced. The following values are replaced: +# +# %% Literal % +# %h The short hostname (as returned by hostname -s) +# %H The full hostname (as returned by hostname --fqdn) +# %n The vserver name, or empty for the host +# %N The vserver name, or "host" for the host +# %v The vserver root directory, or empty for the host +# +# Note that the given vserver must be running! +# +function interpolate() { + path=$1 + vsname=$2 + vexec=${vsname:+$VSERVER $vsname exec } + # Find the values to replace + h=`$vexec hostname -s` + H=`$vexec hostname --fqdn` + n=$vsname + N=${vsname:-host} + v=${vsname:+$VROOTDIR/$vsname} + + expr='' + for var in h H n N v; do + # Do indirect lookup of the value to replace + val=${!var} + # Escape slashes (twice, bash seems to eat one somewhere) + val=`echo "$val" | sed 's#/#\\\\/#g'` + # Add replacement pattern. The first part checks that there is + # an odd number of percent signs before the variable, so + # double % is properly left alone. + expr="${expr}s/\(\(^\|[^%]\)\(%%\)*\)%$var/\1$val/g;" + done + # Finally replace literal % signs + expr="${expr}s/%%/%/g" + + # Do the actual interpolation + echo $path | sed "$expr" +} diff --git a/man/backup.d.5 b/man/backup.d.5 index 5090051..80f0ce8 100644 --- a/man/backup.d.5 +++ b/man/backup.d.5 @@ -97,6 +97,35 @@ The file format of the action configuration files is "ini style." Sections are c pear = no thanks \\ i will not have a pear. +.SH INTERPOLATION + +Some handlers will support path interpolation for some of their configuration variables. Interpolation allows you to give a config variable a different value, depending on the host or vserver it is used in. See the documentation for each handler for which variables are interpolated. + +The following interpolation variables are available: + +.IP %h +The short hostname (output of `hostname -s`). + +.IP %h +The full hostname (output of `hostname --fqdn`). + +.IP %n +The name of the vserver running in, or the empty string when running on the host. + +.IP %N +The name of the vserver running in, or "host" when running on the host. + +.IP %v +The root direcotry of the vserver running in, or the empty string when running on the host. + +.IP %% +A literal %. + +For example, the following would backup the foo and bar vservers to /var/backups/foo and /var/backups/bar respectively. + + backupdir = /var/backups/%n + vsnames = foo bar + .SH SEE ALSO .BR backupninja (1), .BR ninjahelper (1),