как я могу гарантировать, что если новая версия файла конфигурации загружается через марионетку из главного репозитория на один из управляемых серверов, соответствующая служба перезапускается.
типичный сценарий - допустим, есть новый конфиг munin или apache. puppet client обнаруживает это, перезаписывает локальные файлы ... и ... - как убедиться, что служба перезапущена / перезагружена?
большое спасибо!
Альтернативой уведомлению является подписка:
file { "/etc/sshd_config":
source => "....",
}
service { sshd:
ensure => running,
subscribe => File["/etc/sshd_config"],
}
Разница в том, что отношения описываются с другого конца. Например, вы можете сделать так, чтобы apache подписался на /etc/apache/httpd.conf, но вы бы сделали так, чтобы файл vhost уведомлял apache, так как ваш класс apache не будет знать о каждом вашем vhost.
Аналогичная двусторонняя ситуация применима к require и before. Просто вопрос в том, что имеет больше смысла в конкретной ситуации.
Как упоминал Чад, если вы обнаружите, что марионетка постоянно пытается запустить вашу службу, вам необходимо добавить параметр шаблона, который является регулярным выражением, применяемым к списку процессов. По умолчанию марионетка остановится и начнет перезапуск службы. Если вы добавите hasrestart => true, то он будет использовать команду, указанную в параметре «restart», для перезапуска службы.
Кажется, я что-то нашел:
file { "/etc/sshd_config":
source => "....",
notify => Service[sshd]
}
service { sshd:
ensure => running
}
посмотрим, как это будет работать. в любом случае ваши мысли по этому поводу приветствуются.
(Я знаю, что это очень старый вопрос, но просто подумал, что вложу свои два цента с (на мой взгляд) гораздо более простым способом сделать это)
Не стесняйтесь использовать также обозначения стрелок:
file { "/etc/sshd_config":
source => "....",
} ~>
service { sshd:
ensure => running
}
или
File['/etc/sshd_config'] ~> Service['sshd']
Это работает для Solaris 10 :)
class sun_cron_root {
file { "/var/spool/cron/crontabs/root" :
source => "puppet:///files/cron/sun/sun_cron_root"
}
service {
"cron":
provider => "smf",
ensure => running,
enable => true,
hasrestart => true,
subscribe => File["/var/spool/cron/crontabs/root"]
}
}
Есть несколько эквивалентных обозначений:
Поставить в известность:
file { '/etc/sshd_config':
notify => Service[sshd],
}
service { sshd:
ensure => running
}
Подписывайся:
file { '/etc/sshd_config':
...
}
service { sshd:
ensure => running,
subscribe => File['/etc/sshd_config'],
}
Обозначение стрелки:
File['/etc/sshd_config'] ~> Service['sshd']
Цепочка объявлений
file { '/etc/sshd_config':
...
}
~> service { sshd:
ensure => running,
}
Если вы хотите вызвать reload
вместо того restart
, скорректируйте декларацию услуги:
service { sshd:
ensure => running,
restart => 'pkill -HUP sshd', # if service support such reload
}