定義されたタイプの通知またはサブスクリプションのハンドラーを設定する方法


8

パペットの定義された型にハンドラーを追加するにはどうすればよいですか?たとえば、私が持っている場合:

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

ハンドラfoo::barを含めて何かを処理するにはどうすればよいですか

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

ハンドラーは、通知を受け取ると、条件付きロジック内でさまざまなExecを実行します。

回答:


7

カタログの他の場所で宣言した定義済みのリソースに通知できます。例はどうですか?

CentOSシステム、httpdがインストールおよび停止されました。Puppet 2.7.18でテスト済み

$サービス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']リソースへの通知がトリガーされます。この通知は、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またはサービスリソースをトリガーします。


2
どのようにして逆を行いますか?サービスにFoo ['bar']をサブスクライブさせたいとしましょう。おかげで
ホセ・F. Romaniello
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.