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
operatingsystemcomohostnamesã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.yamle aqueles provenientes da resolução de hierarquia, ou seja,some-rhel-hostnameincluirão todas as classes decommon.yamlplusldap_authdeRedHat.yamlethis_host_onlyde 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
puppetvocê está usando. Verifique aqui para os ponteiros.