Wie richte ich einen Handler für eine Benachrichtigung oder ein Abonnement in einem definierten Typ ein?

8

Wie füge ich einem definierten Puppentyp einen Handler hinzu? Zum Beispiel, wenn ich habe:

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

Wie kann ich einen Handler haben foo::bar, der mit etwas umgeht, das enthält?

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

?

Der Handler würde dann verschiedene Execs innerhalb der bedingten Logik ausführen, wenn er eine Benachrichtigung empfängt.

Kyle Brandt
quelle

Antworten:

7

Sie können eine definierte Ressource benachrichtigen, die Sie an anderer Stelle im Katalog deklariert haben. Wie wäre es mit einem Beispiel?

CentOS-System, httpd installiert und gestoppt. Getestet mit Puppet 2.7.18

$ service httpd status
httpd wird gestoppt

Hier ist ein Beispielmanifest, das eine Exec-Ressource innerhalb eines definierten Ressourcentyps, eine Deklaration dieses definierten Ressourcentyps und eine Serviceressource enthält, die diesen definierten Ressourcentyp benachrichtigt.

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

Wenn ich dies anwende, löst die Statusänderung in meiner httpd-Serviceressource eine Benachrichtigung an die Foo-Ressource ['bar'] aus. Diese Benachrichtigung gilt für alle Service- oder Exec-Ressourcen, die innerhalb des von foo definierten Ressourcentyps verwendet werden.

$ 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

Sinn ergeben? Sie benachrichtigen einfach die von Ihnen deklarierte Ressource. Es werden alle Exec- oder Service-Ressourcen ausgelöst, die innerhalb des definierten Ressourcentyps verfügbar gemacht werden.

Ryan Coleman
quelle
2
Wie machst du das Gegenteil? Angenommen, ich möchte, dass der Dienst Foo ['bar'] abonniert. Vielen Dank
José F. Romaniello