Я просто не могу заставить это работать вообще. Я хочу, чтобы марионетка отправляла сообщение журнала, которое отображается в отчетах при каждом изменении файла. Это кажется таким простым из того, что я слышал и читал, но ничего не работает.
Вот файл 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 agent --test
/etc/sudo
)puppet agent --test
(возможно, с touch site.pp
или service apache2 reload
первый)Я еще не видел любой сообщения от audit
. Я запускаю puppet v2.6.3 на сервере Ubuntu Lucid Lynx 10.04.
Да, это вполне возможно. Что вам нужно использовать, так это метапараметр "уведомить", который расскажет file
ресурс, чтобы запустить другой ресурс, если он запущен. Некоторые типы ресурсов заботятся об уведомлении («обновляются» в документации); service
и exec
ресурсы - самые полезные. Затем вы можете построить exec
ресурс с refreshonly => true
что пишет в журнал или в стандартный вывод.
Я бы реализовал вашу конфигурацию выше так:
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,
}
}
В loglevel
и logoutput
параметры к exec
просто прояснит, куда идет вывод, пока вы экспериментируете; вы, безусловно, можете настроить их под свои нужды.
Вы должны иметь возможность уведомлять любой тип, поэтому вы можете уведомлять тип уведомления.
exec { "foo":
notify => Notify["exec-alert"],
}
notify { "exec-alert":
message => "sudoers has changed"
}
тот факт, что изменения файла все равно записываются в журналы марионетки, помечается как изменение.