Using a template with Deferred
values
Templates are rendered on the primary server during catalog compilation. However, this won't work with deferred functions because their values aren't known at compile time. Instead, you need to defer the template rendering.
To defer the template rendering, you need to compile the template source into the catalog,
and then render the string using the inline_epp()
function.
The template source must be in the files directory of your module for it to be accessible to
the file()
function.
$variables = {
'password' => Deferred('vault_lookup::lookup',
["secret/test", 'https://vault.docker:8200']),
}
# compile the template source into the catalog
file { '/etc/secrets.conf':
ensure => file,
content => Deferred('inline_epp',
[file('mymodule/secrets.conf.epp'), $variables]),
}
Note: You cannot defer
.erb
style templates like this
because of the way they use scope. Use .epp
templates
instead.