Voltando com uma solução e para futuros googlers. Obrigado a outros pela entrada.
Houve uma discussão aqui que levou a um conjunto de arquivos sugerindo uma solução .
No entanto, minha experiência limitada sugere que isso estava um pouco desatualizado em termos de localização de arquivos. No cliente, você precisa de um arquivo assim:
root@vbox1-test:/etc/puppet# cat custom_facts.yml
servertype: webserver-type1
No servidor (puppetmaster) se você seguir os arquivos no segundo link fornecido, então o .rb funciona bem, mas o local está errado (estou usando v3.x). Tente movê-lo para:
ubuntu@puppetmaster:/etc/puppet/modules/custom/lib/facter$ ls custom_facts.rb
custom_facts.rb
Em qualquer um dos seus arquivos .pp do módulo, etc, basta adicionar algo como
...
notify { "My servertype is: ${servertype}" : }
...
Novamente, o segundo link alude ao fato de que você pode fazer uma declaração de "caso" para escolher quais módulos / manifestos são usados. Então eu posso aplicar um conjunto básico de regras para a maioria das máquinas, depois algumas personalizadas para certos tipos, sem tocar nos manifestos do servidor.
O efeito que você obtém no cliente é algo assim:
root@vbox1-test:/etc/puppet# puppet agent --test
Info: Retrieving plugin
/File[/var/lib/puppet/lib/facter]/ensure: created
/File[/var/lib/puppet/lib/facter/custom_facts.rb]/ensure: defined content as '{md5}xxxxxxxxxxxxxxxxxxxxxxx'
Info: Loading facts in /var/lib/puppet/lib/facter/custom_facts.rb
Info: Caching catalog for vbox1-test
Info: Applying configuration version '1351762428'
My servertype is: webserver-type1
/Stage[main]//Node[default]/Notify[My servertype is: webserver-type1]/message: defined 'message' as 'My servertype is: webserver-type1'
Finished catalog run in 0.05 seconds
Estou bem otimista, isso me dá o que eu quero e posso manter os manifestos livres de nomes de servidores, que são herdados e estão crescendo continuamente.