Sou relativamente novo no Puppet, mas até agora percebi que ele é uma ferramenta muito poderosa.
Para um exemplo fácil, digamos que eu tenha um módulo "ntp"
No módulo ntp eu tenho três classes:
- class ntp - Instala o pacote do provedor do pacote distro, define as informações para iniciar o serviço, etc.
- class ntp :: client - Cria o arquivo de configuração para usar meus servidores ntp locais, pára ntp, força um ntpupdate e inicia o serviço ntp
- class ntp :: server - Cria o arquivo de configuração para fazer meus servidores ntp locais, pára ntp, força um ntpupdate (na configuração inicial) e inicia o serviço ntp
Não tenho certeza da maneira correta de disponibilizar as definições de serviço na classe ntp para as classes ntp :: client e ntp :: server.
Estou usando fatos para, basicamente, identificar os diferentes sistemas operacionais e os nomes de pacotes e serviços. Deixei isso fora dos meus exemplos para salvar a desordem.
Em vez de ter algo como o seguinte em cada aula:
service{ 'ntp':
name => $ntpservice,
ensure => running,
subscribe => File['ntpconf'],
}
package{ 'ntp':
(etc - I think the point has been communicated)
Eu acho que seria mais limpo e fácil definir o serviço na classe ntp e chamar esse serviço na classe ntp da classe ntp :: client e ntp :: server. Basicamente, por causa de múltiplas plataformas (baseadas em RHEL e Debian) os pacotes e serviços podem ser definições ligeiramente diferentes.
O que eu preferiria ter em ntp :: client e ntp :: server é algo assim:
file{ 'ntpconf':
source => 'puppet:///modules/ntp/ntp.conf',
owner => 'root',
group => 'root',
mode => '0644',
notify => Service[**CALL TO class ntp SERVICE**],
require => Package[**CALL TO class ntp PACKAGE**],
}
Parece que lembro de ter lido na documentação há algum tempo que isso pode ser feito, mas não consigo encontrar de novo. De todas as coisas que eu marquei, falhei em marcar isso!
Todas as sugestões são muito apreciadas. Agradecemos antecipadamente.
EDIT Além disso, estou usando fatos e maiúsculas e minúsculas para definir os parâmetros para o nome do pacote e nomes de serviço pelo sistema operacional. Eu não incluí essa informação no código de exemplo porque está funcionando bem e parece uma bagunça desnecessária.