Я пытаюсь использовать локальную переменную во включенном файле. Я получаю ошибку, которая это, она не определяется. Я не уверен способ сделать это, не так ли? У меня есть папка рецепта с:
recipes/
development.rb
testing.rb
config.rb
development.rb
username = "vagrant"
static = []
django = ["project1", "project2"]
include_recipe "server::config" # <-- Trying to use static and django in there.
config.rb
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
Вы не можете обмениваться переменными между рецептами, но есть два способа обмена данными между рецептами.
статических
и ] django
как атрибуты в attributes / default.rb
. Это означает, что они станут доступны в объекте узла
и будут доступны из каждого рецепта. attributes / default.rb
default["server"]["static"] = []
default["server"]["django] = ["project1", "project2"]
recipes / config.rb
node["server"]["static"].each do |vhost|
...
end
node["server"]["django"].each do |vhost|
...
end
Я предлагаю определенно придерживаться первого варианта, это наиболее распространенный подход. Надеюсь, это поможет!
Немного поздновато для стороны по этому поводу, и я думаю, что принятое решение является предпочтительным вариантом здесь, но...
Можно установить переменную в 'родительском' рецепте и использовать ее в включенном рецепте, изменив узел на converge, например
node.default['django'] = ["project1", "project2"]
Я делал это в прошлом, когда я хотел, чтобы вспомогательный рецепт вёл себя немного по-другому при вызове из разных 'родительских' рецептов, т.е. установка другого git-репозитория, основанного на доступе к чуть отличающемуся от атрибутов набору конфигураций.
Что касается того, является ли это лучшей практикой, то я приветствую комментарии, но это казалось проще, чем написать ресурс для обёртывания git lwrp.
.