Se você estiver usando o Puppet 3 ou posterior, a melhor maneira de abordar isso seria usar o hiera para executar pesquisa automática de parâmetros . Em resumo, ele permite que você declare classes usando a sintaxe include em vez da sintaxe resource-style, o que significa que você pode ter várias declarações para a classe. Note que você não pode misturar declarações include e estilo de recurso para uma classe.
Normalmente, se você usar a sintaxe include para declarar uma classe, ela falhará se tiver algum parâmetro obrigatório. Quando você usa a pesquisa automática de parâmetros, o fantoche tentará pesquisar os valores dos parâmetros por meio do hiera.
Hiera é assim chamado porque tentará procurar valores através de uma hierarquia de fontes de dados. Você pode especificar essa hierarquia em hiera.yaml e pode corresponder a vários fatos (hostname, fatos personalizados, etc.) ou verificar arquivos codificados.
Veja um breve exemplo que pode funcionar no seu caso:
Definição de classe:
class my_packages {
include ::ntp
...
}
mytime.yaml:
----
ntp::servers:
- 'de.pool.ntp.org'
- 'ptbtime1.ptb.de'
- 'ptbtime2.ptb.de'
- 'ptbtime3.ptb.de'
common.yaml:
---
ntp::servers: ['de.pool.ntp.org']
hiera.yaml:
...
:hierarchy:
- "${::fqdn}"
- common
...
Neste caso o hiera tentaria procurar um valor para os servidores param na classe ntp, usando a chave ntp :: servers. Primeiro, ele procuraria essa chave em todos os arquivos yaml que correspondessem ao nome do host e, depois disso, pareceria comum.yaml.
Na maioria dos casos, usaria a chave em common.yaml, mas no caso do nó mytime, encontraria um valor mais alto na hierarquia e pararia de procurar lá.
Aqui está um link para um exemplo completo , que cobre o módulo ntp.