Comment configurer un gestionnaire pour une notification ou un abonnement dans un type défini?

8

Comment ajouter un gestionnaire à un type défini dans marionnette? Par exemple, si j'ai:

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

Comment puis-je avoir un gestionnaire foo::barpour gérer quelque chose qui contient

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

?

Le gestionnaire exécuterait ensuite divers Execs dans la logique conditionnelle lorsqu'il recevra une notification.

Kyle Brandt
la source

Réponses:

7

Vous pouvez notifier une ressource définie que vous avez déclarée ailleurs dans le catalogue. Que diriez-vous d'un exemple?

Système CentOS, httpd installé et arrêté. Testé avec Puppet 2.7.18

$ service httpd status
httpd est arrêté

Voici un exemple de manifeste qui contient une ressource exec à l'intérieur d'un type de ressource défini, une déclaration de ce type de ressource défini et une ressource de service qui notifie ce type de ressource défini.

./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'],  
}

Lorsque j'applique cela, le changement d'état dans ma ressource de service httpd déclenche une notification à la ressource Foo ['bar']. Cette notification s'appliquera à toutes les ressources de service ou d'exécution utilisées à l'intérieur du type de ressource défini 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

Ça a du sens? Vous notifiez simplement la ressource que vous avez déclarée. Cela déclenchera toutes les ressources d'exécution ou de service exposées à l'intérieur du type de ressource défini.

Ryan Coleman
la source
2
Comment faites-vous l'inverse? Disons que je veux que le service s'abonne à Foo ['bar']? Merci
José F. Romaniello