厨师模板以及如何在ruby中执行for循环

时间:2012-05-07 19:12:22

标签: ruby chef

我对红宝石和厨师很新。我正在尝试根据核心数在nginx.conf文件中创建条目。

for i in <%= node["cpu"]["total"]%>
upstream frontends {
        server 127.0.0.1:805x;
    }

end

所以..如果4个核心,文件将如下所示:

upstream frontends {
            server 127.0.0.1:8051;
            server 127.0.0.1:8052;
            server 127.0.0.1:8053;
            server 127.0.0.1:8054;
        }

3 个答案:

答案 0 :(得分:14)

<强>配方

template "/etc/nginx/sites-available/my-site.conf" do
  variables :frontends_count => node["cpu"]["total"]
end

<强>模板

upstream frontends {
<% @frontends_count.times do |i| %>
  server 127.0.0.1:805<%= i + 1 %>;
<% end %>
}

答案 1 :(得分:3)

我不熟悉Chef,因为我是Puppet用户。一般来说,我会像这样解决它:

n.times { |i| puts "server 127.0.0.1:805#{i+1}" }

输出:

server 127.0.0.1:8051
server 127.0.0.1:8052
server 127.0.0.1:8053
server 127.0.0.1:8054

显然你必须用n替换node["cpu"]["total"](我假设它是一个整数)并使用puts之外的其他东西,但这应该让你开始。我想这应该适用于Chef:

upstream frontends {
<% node["cpu"]["total"].times do |i| -%>
  <%= "server 127.0.0.1:805#{i+1}" %>
<% end -%>
}

答案 2 :(得分:0)

以下是if语句的示例。

食谱:

Housefull <-  predict(fullmodel, newdata[,])
Housebest <-  predict(bestmodel, newdata[,])
Housesqft <-  predict(sqftmodel, newdata[,])

模板:

template "/opt/auth/users.xml" do
 ...
 variables(
   :users => auth_users
 )
end