2012-05-07 35 views
2

我很新的紅寶石和廚師。我正在嘗試根據核心數量在nginx.conf文件中創建條目。廚師模板和如何做一個for循環在紅寶石

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

end 

So..if 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; 
     } 
+1

什麼,如果有16個內核?你想要最後一個端口8066或端口80516? –

回答

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 %> 
} 
3

我不熟悉的廚師,因爲我是一個木偶用戶。一般來說,我會解決它像這樣雖然:

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 

很明顯,你必須通過node["cpu"]["total"]更換n(我認爲這是一個整數),並使用其他的東西比puts,但應該讓你開始。我想這應該廚師工作:

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

下面是if語句的例子。

食譜:

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

模板:

<% @users.each do |u| %> 
    <user username="<%= u['username'] %>" password="<%= u['password'] %>" roles="<%= u['roles'] if u['roles'] %>" groups="<%= u['groups'] if u['groups'] %>" /> 
<% end %>