Is there a way to achieve similar functionality to the way cookiecutter works, where template tags can be used in directory/file names?
Alternatively- any way to force interpolating a string a second time could be a workaround?
Well, could you provide a real world example?
With cookiecutter, I can create the following directory tree from which to render another directory full of files, for example:
{{project_dir}}/
– file1. tmpl
– {{docs_dir}}/
---- readme.md.tmpl
Rendering that structure with values - project_dir = “foo”, docs_dir=“bar” would result in:
foo/
– file1
– bar/
---- readme.md
With hashicorp/dir/template, the filenames don’t get rendered, only the file contents.
I’m fairly sure the same is true with the template_dir provider but I really don’t want to create local files anyway.
I may have a hacky workaround which is implement the tag replacement manually, looping over the hashicorp/dir/template results and replace each tag with a value but it’s extremely hardcoded.
For example:
module "template_files" {
source = "hashicorp/dir/template"
base_dir = "${path.module}/templates"
template_vars = {
project_dir = "foo"
docs_dir = "bar"
}
}
locals {
_iter1 = { for file, values in module.template_files.files : "${replace(file,"{{project_dir}}", "foo")}" => values }
# ... more iters for more variable replacements
rendered_template_files = { for file, values in module.template_files.files : "${replace(file,"{{docs_dir}}", "bar")}" => values }
}
It would be great if the module would handle interpolation of the file names itself though i didn’t see a way to do that. Alternatively a templatestring() or interpolatestring() function would seem to solve the problem. We could name a directory something like "${project_dir}/ and then
locals {
rendered_template_files = { for file, values in module.template_files.files : "${templatestring(file)}" => values }
}
I guess the main difference between templatestring and interpolatestring would be whether or not you had to pass a map of template vars or would you use the regular var.x syntax.