¿Cómo configurar un controlador para una notificación o suscripción en un tipo definido?

8

¿Cómo agrego un controlador a un tipo definido en marioneta? Por ejemplo, si tengo:

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

¿Cómo puedo tener un controlador foo::barpara manejar algo que contiene

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

?

El controlador ejecutaría varios Execs dentro de la lógica condicional cuando reciba una notificación.

Kyle Brandt
fuente

Respuestas:

7

Puede notificar a un recurso definido que ha declarado en otra parte del catálogo. ¿Qué tal un ejemplo?

Sistema CentOS, httpd instalado y detenido. Probado con Puppet 2.7.18

$ service httpd status
httpd se detiene

Aquí hay un manifiesto de ejemplo que contiene un recurso ejecutivo dentro de un tipo de recurso definido, una declaración de ese tipo de recurso definido y un recurso de servicio que notifica ese 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'],  
}

Cuando aplico esto, el cambio de estado en mi recurso de servicio httpd desencadena una notificación al recurso Foo ['bar']. Esta notificación se aplicará a cualquier servicio o recurso ejecutivo utilizado dentro del 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

¿Tener sentido? Simplemente notifica el recurso que declaraste. Activará cualquier recurso ejecutivo o de servicio expuesto dentro del tipo de recurso definido.

Ryan Coleman
fuente
2
¿Cómo haces lo inverso? Digamos que quiero que el servicio se suscriba a Foo ['bar']? Gracias
José F. Romaniello