Как настроить обработчик для уведомления или подписки определенного типа?

8

Как добавить обработчик для определенного типа в кукольном? Например, если у меня есть:

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

Как я могу иметь обработчик foo::barдля обработки чего-то, что содержит

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

?

Затем обработчик запускает различные Execs внутри условной логики, когда он получает уведомление.

Кайл Брандт
источник

Ответы:

7

Вы можете уведомить определенный ресурс, который вы объявили в другом месте в каталоге. Как насчет примера?

Система CentOS, httpd установлен и остановлен. Протестировано с Puppet 2.7.18

$ service httpd статус
httpd остановлен

Вот пример манифеста, который содержит ресурс exec внутри определенного типа ресурса, объявление этого определенного типа ресурса и ресурс службы, который уведомляет этот определенный тип ресурса.

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

Когда я применяю это, изменение состояния в моем ресурсе службы httpd вызывает уведомление для ресурса Foo ['bar']. Это уведомление будет применяться к любым ресурсам службы или exec, используемым внутри определенного типа ресурса 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

Есть смысл? Вы просто уведомляете ресурс, который объявили. Он будет запускать любые ресурсы exec или service, предоставляемые внутри определенного типа ресурса.

Райан Коулман
источник
2
Как вы делаете обратное? Допустим, я хочу, чтобы служба подписалась на Foo ['bar']? Спасибо
Хосе Ф. Романиелло