Você pode configurar a hierarquia de arquivos YAML para isso. Vamos começar com hiera.yaml
:
---
:hierarchy:
- "host/%{fqdn}"
- "domain/%{domain}"
- "env/%{::environment}"
- "ops/%{operatingsystem}"
- "os/%{osfamily}"
- common
:backends:
- yaml
:yaml:
:datadir: /etc/puppet/data
Para a estrutura de pastas, você pode usar qualquer fato que possa ver na saída de facter -y
. por exemplo. você pode ter arquivos de configuração hiera para cada arquitetura de CPU. Então você adicionaria linha
- "arch/%{::architecture}"
e hiera pareceria dizer em arch/amd64.yaml
Para depurar hiera, você pode descarregar seus fatos atuais:
$ facter -y > myhost.yaml
E procure alguma variável:
$ hiera -y myhost.yml snmp_location --debug
Hiera vai passar por todas as regras e tentar encontrar a variável:
DEBUG: Mon Nov 11 11:00:23 +0100 2013: Hiera YAML backend starting
DEBUG: Mon Nov 11 11:00:23 +0100 2013: Looking up snmp_location in YAML backend
DEBUG: Mon Nov 11 11:00:23 +0100 2013: Looking for data source host/myhost.example.com
...
DEBUG: Mon Nov 11 11:00:23 +0100 2013: Looking for data source ops/Ubuntu
DEBUG: Mon Nov 11 11:00:23 +0100 2013: Cannot find datafile /etc/puppet/data/ops/Ubuntu.yaml, skipping
Para corresponder $::clientcert
, pode ser uma boa ideia extrair o domínio principal para um fato separado e, em seguida, apenas ter arquivos yaml para cert/example1.org.yaml
, que conteria algo assim:
---
snmp_location: 'Example Org 1'
É bom saber que, mesmo que você tenha um módulo que não contenha nenhuma chamada de função hiera, você poderá configurar facilmente os valores dos parâmetros:
class snmp (
$location = 'foo',
) {
# ...
}
algumas configurações hiera:
---
snmp::location: 'Example Org 1'