Bem, primeiro desisti e defini meu @@
no tipo de arquivo real. A vantagem é que isso ainda está usando as variáveis no host do cliente.
class bacula-client ($database = false) {
@@file { "${hostname}-bacula-client.conf":
mode => 600,
owner => bacula,
group => root,
path => "/etc/bacula/conf.d/${hostname}-client.conf",
content => template("bacula-dir-cliententry.erb"),
tag => 'bacula-client',
notify => Service[bacula-director]
}
...
}
Isso me permite usar entradas no arquivo erb, como:
<% if has_variable?("database") and database== "true" %>
...
<% end -%>
e declarações em meus arquivos site.pp como: class { bacula-client: database => "true" }
Para lidar com o diretório em si:
class bacula-director {
file { '/etc/bacula/conf.d':
ensure => directory,
owner => bacula,
group => root,
mode => 600,
purge => true,
recurse => true
}
...
}
Limpar e reciclar limpa qualquer coisa não definida. Quando eu coloco um host offline, puppetstoredconfigclean $hostname
limpará os fatos e a próxima execução do boneco no diretor redefinirá a configuração de forma apropriada.
Finalmente, o próprio software do diretor Bacula me permite fazer o seguinte no final do meu arquivo bacula-dir.conf:
@|"sh -c 'for f in /etc/bacula/conf.d/*.conf ; do echo @${f} ; done'"
Portanto, ainda não parece haver uma maneira direta de usar um modelo ERB em um conjunto de recursos coletados, mas é possível coletar um tipo. Isso pode incluir os tipos de Augeas para colocar tudo em um arquivo, ou um hack de coletar arquivos em uma configuração. Ainda não inclui o que eu estava procurando na pergunta.