如何在厨师食谱中包装通知或订阅
How to wrap notifies or subscribes in chef cookbook
在keepalived cookbook中有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
subscribes 被转换为 notifies 所以我试图在 template[keepalived.conf][=32= 上包装通知] 结果相同但没有成功 ;/
有人可以帮忙吗?
您无法"override" 订阅或通知来电。但是,您可以将它们从通知堆栈中删除,但这不是一件好事。 run_context
对象有一组即时通知和延迟通知。您必须了解它,搜索它,然后删除有问题的通知。而且,由于很少有内容在 public API 中,您将冒着每次更新 Chef 都会破坏它的风险。最好的办法是将食谱放入 PR 中,要求将重启更改为重新加载,或者至少提供将其更改为重新加载的选项。
我将在此处添加确切的示例:
n = run_context.delayed_notifications('template[keepalived.conf]')
n.first.action = :reload
其他提示:
使用 notifies_immediately
或 delayed_notifications
作为确切的通知类型,
subscribes
在目标资源上静默转换为 notifies
,因此您必须始终覆盖正确的 notifes
对象。
在keepalived cookbook中有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 subscribes 被转换为 notifies 所以我试图在 template[keepalived.conf][=32= 上包装通知] 结果相同但没有成功 ;/
有人可以帮忙吗?
您无法"override" 订阅或通知来电。但是,您可以将它们从通知堆栈中删除,但这不是一件好事。 run_context
对象有一组即时通知和延迟通知。您必须了解它,搜索它,然后删除有问题的通知。而且,由于很少有内容在 public API 中,您将冒着每次更新 Chef 都会破坏它的风险。最好的办法是将食谱放入 PR 中,要求将重启更改为重新加载,或者至少提供将其更改为重新加载的选项。
我将在此处添加确切的示例:
n = run_context.delayed_notifications('template[keepalived.conf]')
n.first.action = :reload
其他提示:
使用
notifies_immediately
或delayed_notifications
作为确切的通知类型,subscribes
在目标资源上静默转换为notifies
,因此您必须始终覆盖正确的notifes
对象。