Lets say that you have an array of NFS clients to allow access to an export. You want to expand this into a list of resources, which you’d normally do via something like:
$allow = hiera_array('some_variable', undef) nfs::export { $allow: ... }
This works fine until you want to have multiple exports to the same name/IP, at which point you have two nfs::export resources with the same name. But you need the expansion of the array to generate multiple calls to nfs::export, so you need to prefix each string in the array:
$allow = hiera_array('some_variable', undef) $hacked_allow = prefix($allow, "${fqdn} export of ${path} to client ") nfs::export { $hacked_allow: ... }
..then in the called define you extract the client fqdn like so:
define nfs::export ( ... ) { $client = regsubst($name, "^.* export of .* to client (.*)$", '\1') validate_string($client) ... [use $client as fqdn in here] }
This seems like a terrible hack, but it’s a reasonable workaround for the need to expand arrays and keep the names unique to avoid duplicate resources.