как я могу гарантировать, что если новая версия файла конфигурации загружается через Puppet из главного репозитория на один из управляемых серверов, соответствующая служба перезапускается?
типичный сценарий - предположим, есть новая конфигурация Munin или Apache. Клиент Puppet обнаруживает ее, перезаписывает локальные файлы... и... - как убедиться, что служба перезапущена/перезагружена?
большое спасибо!
решение1
Альтернативой уведомлению является подписка:
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. Вопрос только в том, что имеет больше смысла в конкретной ситуации.
Как упомянул Чад, если вы обнаружили, что puppet постоянно пытается запустить вашу службу, то вам нужно добавить параметр шаблона, который является регулярным выражением для применения к списку процессов. По умолчанию puppet выполнит остановку и запуск для перезапуска службы. Если вы добавите "hasrestart => true", то он будет использовать команду, указанную в параметре "restart", для перезапуска службы.
решение2
кажется, я что-то нашел:
file { "/etc/sshd_config":
source => "....",
notify => Service[sshd]
}
service { sshd:
ensure => running
}
посмотрим, как это сработает. В любом случае, ваши мысли по этому поводу приветствуются.
решение3
(Я знаю, что это очень старый вопрос, но я просто подумал, что вставлю свои пять копеек и расскажу о (на мой взгляд) гораздо более простом способе решения этой проблемы)
Вы также можете свободно использовать стрелочные обозначения:
file { "/etc/sshd_config":
source => "....",
} ~>
service { sshd:
ensure => running
}
или
File['/etc/sshd_config'] ~> Service['sshd']
решение4
Существует несколько эквивалентных обозначений:
Поставить в известность:
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
}