Como configurar um manipulador para uma notificação ou assinatura em um tipo definido?

8

Como adiciono manipulador a um tipo definido no fantoche? Por exemplo, se eu tiver:

define foo::bar ($baz) {
 ...
}

Como posso ter um manipulador foo::barpara lidar com algo que contém

...
   notify => Foo::Bar['zippidy']
...

?

O manipulador executaria vários Execs dentro da lógica condicional quando receber uma notificação.

Kyle Brandt
fonte

Respostas:

7

Você pode notificar um recurso definido que você declarou em outra parte do catálogo. Que tal um exemplo?

Sistema CentOS, httpd instalado e parado. Testado com o Puppet 2.7.18

$ service httpd status
httpd está parado

Aqui está um exemplo de manifesto que contém um recurso exec dentro de um tipo de recurso definido, uma declaração desse tipo de recurso definido e um recurso de serviço que notifica esse tipo de recurso definido.

./notify_defined_types.pp

define foo(){

   exec { "${name}_exec":
     command     => "echo hello ${name}",
     path        => '/bin:/usr/bin',
     refreshonly => true,
     logoutput   => true,
   }

}

foo { 'bar': }

service { 'httpd':  
  ensure => running,  
  notify => Foo['bar'],  
}

Quando aplico isso, a mudança de estado no meu recurso de serviço httpd aciona uma notificação para o recurso Foo ['bar']. Esta notificação se aplicará a qualquer serviço ou recurso executivo usado dentro do tipo de recurso definido foo.

$ puppet apply notify_defined_types.pp 
notice: /Stage[main]//Service[httpd]/ensure: ensure changed 'stopped' to 'running'
notice: /Stage[main]//Foo[bar]/Exec[bar_exec]/returns: hello bar
notice: /Stage[main]//Foo[bar]/Exec[bar_exec]: Triggered 'refresh' from 1 events
notice: Finished catalog run in 0.51 seconds

$ puppet apply notify_defined_types.pp 
notice: Finished catalog run in 0.38 seconds

Faz sentido? Você simplesmente notifica o recurso que declarou. Ele acionará todos os recursos de exec ou serviço expostos dentro do tipo de recurso definido.

Ryan Coleman
fonte
2
Como você faz o inverso? Digamos que eu queira que o serviço assine Foo ['bar']? Obrigado
José F. Romaniello