2015-04-24 3 views
1

В keepalived кулинарных есть такое определение keepalived ресурса службы:Как завернуть извещает или подписываются в повар поваренной книге

service "keepalived" do 
    supports :restart => true 
    action [:enable, :start] 
    subscribes :restart, "template[keepalived.conf]" 
end 

Это, вероятно, хорошо для большинства людей, но я не хочу, чтобы перезапустить keepalived в случае небольших изменений конфигурации. Перезапуск приведет к перемещению IP-адресов с главного сервера на ведомый и т. Д. - на CentOS достаточно перезагрузить службу.

Так что я начал завернув в моей кулинарной книге, как это:

begin 
    r = resources(:service => "keepalived") 
    r.supports :restart => true, :reload => true 
    r.subscribes :reload, "service[keepalived]" 
rescue Chef::Exceptions::ResourceNotFound 
    Chef::Log.warn "could not find service to override!" 
end 

Но это называется рестарт, а затем перезагрузить службы:

Recipe: keepalived::default 
    - restart service service[keepalived] 
    - reload service service[keepalived] 

я нашел здесь: https://github.com/chef/chef/blob/78ba88287781667e4aa344bc4ceff280fa7ac466/lib/chef/resource.rb#L316 что выписывает является преобразованный в , уведомляет об этом, поэтому я попытался уведомить об этом на template [keepalived.conf] с таким же результатом и без успеха;/

Может ли кто-нибудь помочь в этом?

+1

Я думаю, вам нужно удалить его из коллекции ресурсов, но я просто не уверен, как это сделать. – StephenKing

+0

Похоже, вы могли бы сделать запрос на улучшение в кулинарной книге 'keepalived' или отправить им запрос на перенос с изменением. – cassianoleal

ответ

1

Вы не можете «переопределять» подписку или уведомление. Однако вы можете удалить их из стека уведомлений, но это не очень хорошо. Объект run_context имеет набор мгновенных и отложенных уведомлений. Вам нужно будет это узнать, выполнить поиск по нему и удалить уведомление о нарушении. И, поскольку очень мало того, что есть в публичном API, вы рискуете этим сломаться при каждом обновлении шеф-повара. Лучше всего поставить PR в кулинарной книге, чтобы перезагрузка была изменена для перезагрузки или, по крайней мере, дала возможность изменить ее на перезагрузку.

Добавлю точный пример здесь:

n = run_context.delayed_notifications('template[keepalived.conf]') 
n.first.action = :reload 

Дополнительные советы:

  • использование notifies_immediately или delayed_notifications для точного типа notyfication,

  • subscribes тихо превращается в notifies на целевой ресурс, поэтому вы должны всегда перезаписывать правильно notifes объект.

+0

Спасибо за этот совет - это именно то, что я сделал просто, прежде чем вы ответили :-) Пример кода выглядит следующим образом: п = run_context.delayed_notifications («шаблон [keepalived.conf]») n.first. action =: reload Я согласен, что PR для оригинального проекта будет лучшим решением, но из-за принудительной необходимости подписывать CLA у меня нет разрешения на это прямо сейчас. – Tim

+0

О, какая боль. Мне приходилось иметь дело с этим когда-то. Это было неприятно. Но я рад, что сработал для вас.Я даже не подумал об изменении действия, чтобы: перезагрузить и просто удалить уведомление. –