我似乎无法得到这个工作。 我想让puppet发送一个日志消息,当文件发生变化的时候,就会在报告中显示出来。 这听起来很简单,但是没有任何作用。
这是init.pp文件:
# sudo init.pp # 21 Sep 2011: Changed to test for notification only class sudo { package { 'sudo': ensure => present, before => File['/etc/sudoers'], } file { '/etc/sudoers': ensure => file, mode => 440, owner => root, group => root, source => 'puppet:///modules/sudo/sudoers', replace => false, audit => content, } # exec { "/bin/date": # cwd => "/tmp", # subscribe => File['/etc/sudoers'], # refreshonly => true, # } # notify { "sudoers has been changed.": # refreshonly => true, # } }
如果我添加exec ,什么都不会发生。 如果我添加notify ,它会抱怨refreshonly参数。
如果删除除audit外的所有文件选项,则文件权限将从440更改为644。
如果我删除replace那么puppet覆盖文件。
我的testing一直是:
puppet agent --test /etc/sudo ) puppet agent --test (可能与touch site.pp或service apache2 reload第一次service apache2 reload ) 我还没有看到任何来自audit消息。 我在Ubuntu Lucid Lynx服务器10.04上运行puppet v2.6.3。
是的,这是非常可能的。 你需要使用的是“通知”元参数 ,它会告诉file资源在触发时使另一个资源运行。 一些资源types关心被通知(在文档中“刷新”); service和exec资源是最有用的。 然后,您可以使用refreshonly => true构build一个exec资源,将其写入日志或标准输出。
我会像这样实现你的configuration:
class sudo { package { 'sudo': ensure => present, before => File['/etc/sudoers'], } file { '/etc/sudoers': ensure => file, mode => 440, owner => root, group => root, source => 'puppet:///modules/sudo/sudoers', replace => false, notify => Exec["sudoers_changed"], } exec { "sudoers_changed": command => "/bin/echo '/etc/sudoers has changed...'", refreshonly => true, loglevel => "alert", logoutput => true, } }
exec的loglevel和logoutput参数只会让你更清楚的知道输出的内容, 你当然可以调整他们的需求。
你应该能够通知任何types,所以你可以通知通知types。
exec { "foo": notify => Notify["exec-alert"], } notify { "exec-alert": message => "sudoers has changed" }
文件更改的事实logging到木偶日志,它被标记为一个变化。