Puppet:审核外部文件更改?

时间:2016-11-24 14:35:17

标签: puppet audit

在我的puppet托管环境中,每次文件更改时都需要重新启动一项服务。文件本身不受傀儡的控制,而是包的一部分,即在(yum)更新期间可能会更新。

因此,我想“订阅”此文件,并在更改时触发服务重启。

由于文件不是由Puppet管理的,因此某些类似审计的方法不起作用

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

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

有没有办法,在Puppet中实现类似的东西? 理想情况下,我只需要在客户端上比较当前与之前的文件哈希值。

但是在Puppet结构中的AFAIS,它需要将当前文件哈希保留在puppet master上并在客户端上再次进行比较(这可能通过事实起作用但是会很笨拙(?))。

1 个答案:

答案 0 :(得分:2)

它似乎与Puppet 4.4.23.4.3一起使用,因此可以安全地假设Puppet 3.x4.x在这里做正确的事情:

$ 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置于实际的服务资源中应该可以更好地工作并导致服务重新启动。