Переопределение атрибутов в рецепте

Позволять'скажем, у меня есть атрибут по умолчанию в кулинарной книге:

default.nginx_upstreams = {
    'service1' => ['service1.server.com'],
    'service2' => ['service2.server.com'],
}

Затем он изменяется и переопределяется в ролях и средах, пока, наконец, не дойдет до моего рецепта. Там я вычисляю некоторые дополнительные сервисы, которые я хотел бы добавить к атрибуту. Если я сделаю что-то вроде этого:

node.nginx_upstreams.merge! {'service3' => ['service3.server.com']}

затем, когда я пытаюсь использовать атрибут в моем шаблоне, я получаюundefined method 'each' for nil:NilClass в моем шаблоне, когда я пытаюсь сделать


Плюс я тоже получаюWARN: Setting attributes without specifying a precedence is deprecated and will be removed in Chef 11.0, Полезное предупреждение говорит мне, как установить атрибуты с нормальным приоритетом (по-видимому, используяnode.set["key"] = "value", но не делаетРасскажите, как задать атрибуты по умолчанию или переопределить.

Я могу обойти эту проблему, сделав что-то вроде этого:

upstreams = node.nginx_upstreams.to_hash
upstreams.merge! {'service3' => ['service3.server.com']}

template "nginx_config" do
    variables({:upstreams=>upstreams})
end

но это похоже на взлом. Я не могу найти документацию поnode.set() заэта страницаЭто также означает, что вы можете установить в рецепте как обычные, так и переопределенные атрибуты, но нене могу сказать как.

Итак ... как правильно установить атрибуты (которые объединяются вместе со всем остальным) из рецепта? Что этоnode.set() вызов на самом деле сделать, и я могу сказать ему приоритет, в котором я хочу слиться?

Ответы на вопрос(3)

Ваш ответ на вопрос