Как добавить обработчик к определенному типу марионетки? Например, если у меня есть:
define foo::bar ($baz) {
...
}
Как мне получить обработчика в foo::bar
обрабатывать то, что содержит
...
notify => Foo::Bar['zippidy']
...
?
Затем обработчик будет запускать различные Execs внутри условной логики, когда он получает уведомление.
Вы можете уведомить определенный ресурс, который вы объявили в другом месте каталога. Как насчет примера?
Система CentOS, httpd установлен и остановлен. Протестировано с Puppet 2.7.18
$ service httpd status
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 или службы, представленные внутри определенного типа ресурса.