Opsworks - after_restart部署条件层的钩子代码

时间:2014-08-10 01:40:22

标签: ruby-on-rails amazon-web-services chef aws-opsworks

我在after_restart.rb中有代码,我只想在rails-app图层中重启时运行。我也有一个延迟的作业自定义图层,如果在延迟的作业层重新启动应用程序,则不应运行此代码。两个图层都在相同的实例上。我尝试了使用node[:opsworks][:instance][:layers]的建议,但因为它是同一个实例,所以我得到["rails-app", "utillayer"]两个部署(同样,两个部署都在同一个实例上,一个用于rails-app,另一个用于名为utillayer的延迟作业)

我希望有一种方法可以识别部署正在进行的层,并将其与if语句联系起来,以便在重新启动位于“rails app”层时运行代码

关于如何做到这一点的任何想法?

1 个答案:

答案 0 :(得分:1)

您之后的特定节点json是:node [:opsworks] [:instance] [:layers]

node_layers = node[:opsworks][:instance][:layers]
## layer must belong to either rails-app OR custom
if (node_layers.include?("rails-app") || node_layers.include?("custom"))
  // do stuff
end

## layer must belong to alteast rails-app 
if (node_layers.include?("rails-app") 
  // do stuff
end

## layer must belong to BOTH layer 
if  node_layers.include?("rails-app") &&  node_layers.include?("workers") 
  // do stuff
end