厨师的正则表达

时间:2015-03-18 16:00:04

标签: regex chef dsl chef-recipe

我们如何在厨师食谱中使用正则表达式/模式匹配。 在我的default.rb配方中,例如:

case node["env_name"]
when "admin-dev"
     include_recipe "lxsetup-deploy::lxsetup-dev"
when "admin-dit"
     include_recipe "lxsetup-deploy::lxsetup-dev"
when "admin-perf1"
     include_recipe "lxsetup-deploy::lxsetup-qa"
when "admin-perf2"
     include_recipe "lxsetup-deploy::lxsetup-qa"
else
     include_recipe "lxsetup-deploy::lxsetup-prod" 
end

有什么方法可以像“admin-d *”或“admin-d [a-z] *”那样匹配字符串admin-dev和admin-dit。我尝试了很多东西,包括上面的东西,但没有任何帮助。

2 个答案:

答案 0 :(得分:3)

这是一个红宝石代码,因此正则表达式匹配适用于same way as in ruby

case node["env_name"]
when /admin-d(ev)|(it)/
     include_recipe "lxsetup-deploy::lxsetup-dev"
when /admin-perf[12]/
     include_recipe "lxsetup-deploy::lxsetup-qa"
else
     include_recipe "lxsetup-deploy::lxsetup-prod" 
end

答案 1 :(得分:1)

Personnaly我喜欢使用哈希来做这样的映射(在属性中):

attribute.rb

env_to_suffix = 
{ 
  "admin-dev" => "dev",
  "admin-dit" => "dev",
  "admin-perf1" => "qa",
  "admin-perf2" => "qa"
}
default['company']['env_suffix'] = env_to_suffix[node.chef_environment] || "prod"
在recipe.rb中

include_recipe "lxsetup-deploy::lxsetup-#{node['company]['env_suffix']}" 

我发现长期维护更容易,并允许每个节点覆盖边缘情况。