首页 > 解决方案 > 厨师食谱模板正则表达式匹配

问题描述

我有一个模板文件

#fileName: test.properties.erb
<% if @env == 'STAGING' && node['hostname'] =~ /^staging/ %>
somekey=node['hostname']
<% else %>
somekey=defaultNode
<% end %>

我的食谱如下

template ("test.properties") do
  source 'test.properties.erb'
  variables(
    env: "STAGING"
  )
end

我想与 REGEX 检查一起执行 && 操作

当我在 erb 文件中使用以下内容时,它适用于 &&

<% if @env = 'STAGING' && node['hostname'].include?('staging-01') %>
...

我想应用一个正则表达式并检查主机名是否以字符串开头staging 说我有staging-01staging-02并适用于两者

标签: rubychef-infra

解决方案


答案似乎是简单的 Ruby 字符串匹配表达式

所以我对表达式进行了更改node['hostname'].match(/staging*/),这成功地评估了食谱。

#fileName: test.properties.erb
<% if @env == 'STAGING' && node['hostname'].match(/staging*/) %>
somekey=node['hostname']
<% else %>
somekey=defaultNode
<% end %>

推荐阅读