On Mon, Jun 25, 2012 at 10:27:40AM -0700, Mark Roggenkamp wrote:
> Hi all,
>
> I'd like to specify a base_directory and a list of directories (as
> variables that may be pulled via hiera later) that will be created under
> that base directory.
>
> base_dir = "/home/base"
> bars = ["a", "b", "c"]
>
> bars will be used to create the folders under base and also part of the
> information going into building a template so I don't want to store them as
> ["$base_dir/a", "$base_dir/b", "$base_dir/c"].
>
> What's the best way to create the bar directories under the base_dir? I'd
> love to just give File the bars array and specify the base_dir as a
> property. Should I make a prepend function that would prepend base_dir to
> each bar and then pass that to File?
>
> I tried a definition but then to loop I have to generate a single loop-able
> structure to call the definition with that contains both bars and base_dir.
> I looked at create_resources but that seems like it'd force me to make more
> things variables than I wanted and duplicate more than I would like.
>
> Thanks,
> Mark
>
If you don't want to use a define here you can use the way how the regsubst
function works on arrays: It will apply the substition on all elements and
will then return an array with the same length. So this does also work:
$base_dir = '/home/base'
$bars = ['a', 'b', 'c']
# prefix all bars with base_dir
$dirs = regsubst($bars, '(.*)', "${base_dir}/\\1")
file { $dirs:
ensure => directory,
}
-Stefan