Chef

Ruby/Chef include_recipe 並知道父文件中的變數?

  • June 2, 2016

我正在嘗試在包含的文件中使用局部變數。我得到它沒有定義的錯誤。我不確定這樣做的方法,你呢?我有一個食譜文件夾:

recipes/
   development.rb
   testing.rb
   config.rb

發展.rb

username = "vagrant"
static = []
django = ["project1", "project2"]

include_recipe "server::config"   # <-- Trying to use static and django in there.

配置文件

static.each do |vhost|  #  <-- How do I get the "static" var in here?
   ...
end

django.each do |vhost|  #  <-- How do I get the "django" var in here?
   ...
end

您不能在配方之間共享變數,但有兩種方法可以在配方之間共享數據。

  1. 首選路線是外部化staticdjango作為attributes/default.rb. 這意味著它們將在對node像上可用並且可以從每個配方中訪問。

屬性/default.rb

default["server"]["static"] = []
default["server"]["django] = ["project1", "project2"]

食譜/config.rb

node["server"]["static"].each do |vhost|
 ...
end

node["server"]["django"].each do |vhost|
 ...
end
  1. 使用Chef 庫創建一個返回這些數組的通用方法。

我的建議是絕對堅持選項一,這是最常見的方法。希望有幫助!

引用自:https://serverfault.com/questions/664801