Chef infra 在定义中支持多个通知

Chef infra 在定义中支持多个通知,chef-infra,Chef Infra,这是我的后续问题 我将一些提供者包装到定义中,我想知道如何处理通知。我成功地编写了一个便宜的实现,在这个实现中,我可以传递一组数组,如下所示: provider_definition name do component $some_component notifies [[:redeploy, "docker_container[some_container]", :immediately], [:redeploy, "docker_container

这是我的后续问题

我将一些提供者包装到定义中,我想知道如何处理通知。我成功地编写了一个便宜的实现,在这个实现中,我可以传递一组数组,如下所示:

provider_definition name do
    component $some_component
    notifies [[:redeploy, "docker_container[some_container]", :immediately],
              [:redeploy, "docker_container[some_other_cntr]", :delayed]]
end
在我的定义中,我有这样的东西:

params[:notifies].each do |notify_action, resource_name, notify_time|
    notifies notify_action, resource_name, notify_time
end
当然有更好的方法吗?我希望我能在食谱中保留同样的格式:

provider_definition name do
    component $some_component
    notifies :redeploy, "docker_container[some_container]", :immediately
    notifies :redeploy, "docker_container[some_other_cntr]", :delayed
end

但是当我这样做的时候,只有最后一个通知符合我的定义。

坚持定义你已经有了我认为更好的方式

实现您希望的一个选项是将您的定义转换为LWRP,这将创建一个自定义资源,该资源可以像任何其他厨师资源一样使用notify属性

docker_库/resources/my_deploy.rb

action :deploy
default_action :deploy

attribute :component, kind_of: Hash, required: true
action :deploy do
  params = new_resource.component
  docker_image params['name'] do
    registry params['registry']
    tag params['tag']
    action :pull
  end
end
docker_库/provider/my_deploy.rb

action :deploy
default_action :deploy

attribute :component, kind_of: Hash, required: true
action :deploy do
  params = new_resource.component
  docker_image params['name'] do
    registry params['registry']
    tag params['tag']
    action :pull
  end
end
我可能是错误的类型为组件,我让你适应你的具体情况。从记忆中写的,我可能忘记了一些东西,有更多关于LWRP的文档

与配方中的前面相同,只是LWRP名称将从cookbook名称和文件名派生,因此在本例中:

my_component = $auth_docker
docker_library_my_deploy my_component.name do 
  component my_component
  notifies :redeploy, "docker_container[some_container]", :immediately
  notifies :redeploy, "docker_container[some_other_cntr]", :delayed
end

再次感谢!可惜没有办法多次指定同一属性。我忘记了配方示例中的通知;)