Puppet Tips&Tricks: Variable variables
Sometimes you want to use variable variables, for instance when you want to iterate over all the ipaddress_* facts that facter found. Using something like ${ipaddress_$if} doesn’t work, though. Inline_template to the rescue! Volcane on IRC suggested the following solution, which works great:
$ifs = split($interfaces,",")
define do_this {
$mule = "ipaddress_${name}"
$donkey = inline_template("<%= scope.lookupvar(mule) %>")
notify { "Found interface $donkey":; }
}
do_this { $ifs:; }
This will output:
$ sudo puppet net.pp notice: Found interface 172.29.121.22 notice: //Do_this[eth0]/Notify[Found interface 172.29.121.22]/message: defined 'message' as 'Found interface 172.29.121.22' notice: Found interface 213.207.83.56 notice: //Do_this[eth1]/Notify[Found interface 213.207.83.56]/message: defined 'message' as 'Found interface 213.207.83.56'
Hope this helps someone else! Leave a message if it does.