2016-11-24 4 views
1

私の人形管理環境では、ファイルが変更されるたびに1つのサービスを再起動する必要があります。ファイルそのものは人形のコントロール下ではなくパッケージの一部です。つまり、更新中に更新される可能性があります。パペット:外部ファイルの変更に関する監査?

このように、私はこのファイルに「購読」して、変更の際にサービスを再起動したいと思います。ファイルはパペットで管理されていないので

、いくつかの監査のようなアプローチが動作しません

file { '/path/to/foo': 
    audit => content, 
} 

notify { 'foo.notify': 
    subscribe => File['/path/to/foo'], 
    message => "foo has changed" 
} 

は人形ではそのようなことを実現する方法は、ありますか? 理想的には、現在のバージョンと前のファイルのハッシュを比較するだけです。

しかし、Puppetの構造内のAFAISでは、現在のファイルハッシュを人形師のマスタに保存し、クライアントで再度比較する必要があります(実際にはうまくいくかもしれませんが、不器用ですか?)。

+1

パペットがパッケージを制御している場合は、パッケージにサブスクライブします。 –

答えて

2

それは人形3.x4.x両方がここで正しいことを行うと仮定しても安全ですので、パペット4.4.23.4.3で動作するように見えるん:

$ cd /tmp 
$ echo foo >foo 
$ puppet apply -e 'file { "/tmp/foo": audit => "content" } ~> exec { "/bin/echo DING": refreshonly => true }' 
Notice: Compiled catalog for this-box in environment production in 0.13 seconds 
Notice: /Stage[main]/Main/File[/tmp/foo]/content: audit change: newly-recorded value {md5}d3b07384d113edec49eaa6238ad5ff00 
Notice: Applied catalog in 0.07 seconds 
$ puppet apply -e 'file { "/tmp/foo": audit => "content" } ~> exec { "/bin/echo DING": refreshonly => true }' 
Notice: Compiled catalog for this-box in environment production in 0.12 seconds 
Notice: Applied catalog in 0.06 seconds 
$ echo bar >foo 
$ puppet apply -e 'file { "/tmp/foo": audit => "content" } ~> exec { "/bin/echo DING": refreshonly => true }' 
Notice: Compiled catalog for this-box in environment production in 0.12 seconds 
Notice: /Stage[main]/Main/File[/tmp/foo]/content: audit change: previously recorded value {md5}d3b07384d113edec49eaa6238ad5ff00 has been changed to {md5}c157a79031e1c40f85931829bc5fc552 
Notice: /Stage[main]/Main/Exec[/bin/echo DING]: Triggered 'refresh' from 1 events 
Notice: Applied catalog in 0.09 seconds 

notifyはイベントに非常にうまく動作しませんのでご注意ください。 subscribeを実際のサービスリソースに入れると、はるかにうまく動作し、サービスが再開されます。

+1

"これはPuppet' 4.4.2'で動作するように見えます。 –

+0

@MattSchuchard私は怠惰に他のバージョンをテストしませんでした。私はそれがどんな '4.x'でも動作すると思います。私は' 3.x'のためにそれを信じています。少しの '3.4.3'テストを実行し、答えを更新します。 –

+0

オック、ちょうど面白いバージョンを選択するように見えた。 4.8.1は最新ですが、4.7.0はPE内の最新ですが、4.6.2は最新の安定したものなので、なぜ4.4.2の選択が好奇妙でしたか? –

関連する問題