Ruby/Шеф-повар include_recipe и знает переменные из родительского файла?

Я пытаюсь использовать локальную переменную во включенном файле. Я получаю ошибку, которая это, она не определяется. Я не уверен способ сделать это, не так ли? У меня есть папка рецепта с:

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
0
задан 4 February 2015 в 05:31
2 ответа

Вы не можете обмениваться переменными между рецептами, но есть два способа обмена данными между рецептами.

  1. Предпочтительным путем было бы экстернализация статических и ] 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
  1. Используйте Chef-библиотеки ], чтобы создать общий метод, который возвращает эти массивы.

Я предлагаю определенно придерживаться первого варианта, это наиболее распространенный подход. Надеюсь, это поможет!

5
ответ дан 4 December 2019 в 11:06

Немного поздновато для стороны по этому поводу, и я думаю, что принятое решение является предпочтительным вариантом здесь, но...

Можно установить переменную в 'родительском' рецепте и использовать ее в включенном рецепте, изменив узел на converge, например

node.default['django'] = ["project1", "project2"]

Я делал это в прошлом, когда я хотел, чтобы вспомогательный рецепт вёл себя немного по-другому при вызове из разных 'родительских' рецептов, т.е. установка другого git-репозитория, основанного на доступе к чуть отличающемуся от атрибутов набору конфигураций.

Что касается того, является ли это лучшей практикой, то я приветствую комментарии, но это казалось проще, чем написать ресурс для обёртывания git lwrp.

.
3
ответ дан 4 December 2019 в 11:06

Теги

Похожие вопросы