Ele provavelmente falha porque a herança ocorre antes que a variável $netgroup
seja avaliada e, portanto, a compilação do catálogo falhe. No entanto, usar esse método para separar o código dos dados tem limitações e deve ser evitado .
Eu refatorei meu código de marionete para usar dados hierárquicos para vinculações de dados e para obter o mesmo efeito de agrupar nós semelhantes. Um exemplo simplificado, supondo que você só precisa agrupar servidores RHEL, seria:
-
Os dados hierárquicos serão recuperados usando a seguinte definição:
hiera.yaml --- :backends: - yaml :hierarchy: - %{::operatingsystem} - %{::hostname} - common :yaml: :datadir: /etc/puppet/hieradata/
Tanto
operatingsystem
comohostname
sãofacts
. A Hiera tentará resolução de dados nesta ordem para um sistema Red Hat cujo nome de host ésome-rhel-hostname
:- RedHat.yaml
- some-rhel-hostname.yaml
- common.yaml
-
Isso espera a seguinte estrutura de diretórios e arquivos:
/etc/puppet/hieradata/ ├── common.yaml ├── RedHat.yaml ├── some-rhel-hostname.yaml └── tst-01.yaml
-
O conteúdo dos arquivos yaml de exemplo:
common.yaml --- classes: - resolv_conf - sshd - ntpd - motp RedHat.yaml --- classes: - ladp_auth some-rhel6-hostname.yaml --- classes: - this_host_only ldap_auth::netgroup: foo-bar tst-01.yaml --- ldap_auth::netgroup: tst-01 nodes.pp default { hiera_include(classes) }
Observe o uso da função
hiera_include
, que retornará uma matriz de todos os valores para cada nó (aqueles decommon.yaml
e aqueles provenientes da resolução de hierarquia, ou seja,some-rhel-hostname
incluirão todas as classes decommon.yaml
plusldap_auth
deRedHat.yaml
ethis_host_only
de seu próprio arquivo yaml).A utilização de ligações de dados nos seus módulos é feita de forma diferente, dependendo de qual versão de
puppet
você está usando. Verifique aqui para os ponteiros.