厨师BVT配方需要仅运行应用程序部署

时间:2014-08-25 15:57:22

标签: chef chef-recipe

我已经推出了BVT(自动化配方),它将作为每个厨师 - 客户端的一部分在客户端服务器上运行,但我们需要修改它,例如,BVT配方需要仅触发应用程序部署而不是其他配置更改。

请告诉我如何执行此操作

1 个答案:

答案 0 :(得分:0)

我们遵循的方法是使用数据库在我们的部署配方中设置deploy_allowed标志和帮助器方法,以测试是否允许部署。

辅助方法看起来像(法语抱歉):

module Company
  def can_deploy?(bag, env, name)
    liv = data_bag_item(bag, env)
    msg = "Aucune entree trouvee, * ou #{name} pour l'environnement #{env}, deploiement refuse."
    liv_allowed = false
    entry = nil

    entry = '*' if liv.include?('*')
    entry = name if liv.include?(name)

    unless entry.nil?
      liv_allowed = true if liv[entry] == 'true'
      msg = "Deploiement #{liv_allowed ? 'autorise' : 'refuse'} par l'entree #{entry} de #{env}"
    end
    Chef::Log.info(msg)
    liv_allowed
  end
end

Chef::Recipe.send(:include, Company)
Chef::Resource.send(:include, Company)
Chef::Provider.send(:include, Company)

和Databag项看起来像(在json中):

{
  "id": "I1",
  "*": "false",
  "I1FR1WAS01": "true",
  "I1FR1WAS02": "false",
  "I1FR1WAS03": "false",
  "I1FR1WAS04": "false"
}

在食谱中我们称之为:

if !can_deploy?("datab_bag",node.chef_environment,node.name) return

在这个例子中,节点的chef_environment是I1,它的名字是I1R1WAS01,它允许它部署而不是其他服务器。

我希望它能帮助您适应您的需求。如果不清楚,请不要犹豫。