Como excluir módulos Puppet para alguns nós?

3

Eu tenho 80 nós, 78 precisam ter um módulo específico, exceto 2.

[root@puppetmaster puppet]# cat hiera.yaml
:backends:
    - yaml

:hierarchy:
    - environment/%{::environment}/%{::hostname}
    - environment/%{::environment}
    - common

:logger: console

:yaml:
    :datadir: '/etc/puppet/hieradata'
[root@puppetmaster puppet]# cat hieradata/common.yaml
---
classes:
  - ldap
  - motd
  - ntp
  - puppet-conf
[root@puppetmaster puppet]# cat hieradata/environment/tst/tst-01.yaml
---
classes:
  - puppet-update
  - public-keys
[root@puppetmaster puppet]#

Eu quero que todos nós tenham o módulo ldap, exceto os servidores tst-01 e tst-02.

Como excluo este módulo desses dois servidores?

Uma solução seria usar 80 arquivos .yaml para todos os nós e adicionar "-ldap" a 78 desses arquivos .yaml, mas isso parece um design ruim. Seria mais limpo excluir os módulos da lista herdada.

    
por ujjain 11.06.2013 / 10:22

2 respostas

2

O problema é que hiera_include usará as classes de todos os níveis (provavelmente usa hiera_array).

Isso provavelmente funcionará:

[root@puppetmaster puppet]# cat hieradata/common.yaml
---
classes:
  - ldap
  - motd
  - ntp
  - puppet-conf
[root@puppetmaster puppet]# cat hieradata/environment/tst/tst-01.yaml
---
classes:
  - puppet-update
  - public-keys
  - motd
  - ntp
  - puppet-conf

No node-def:

class { hiera('classes'): }

O ponto negativo é que você teria que especificar todas as classes no arquivo hiera específico do host, se você substituir o padrão.

Isso ajuda?

    
por 12.06.2013 / 08:08
2

Você pode usar algo assim em seu nodes.pp :

node default {
  hiera_include('classes')
}

node /^tst-0(1|2)\.example\.com$/ inherits default {
}

node /.*example\.com$/ inherits default {
  include ldap
}
    
por 11.06.2013 / 21:15