Я использую поваренную книгу сообщества шеф-повара, которая загружает, устанавливает, настраивает SDK. (Назовем это blah-sdk.) Вы просто include_recipe 'blah-sdk' и альта, он установлен. У него есть атрибут, определяющий версию blah-sdk, которую он установит. Этот атрибут версии, в свою очередь, используется для формирования значения соответствующего атрибута «download_url». В теории я должен был бы установить значение атрибута версии для чего-то еще в поваренной книге, где я включаю blah-sdk. Но есть проблема. Атрибут download_url устанавливается (используется версия по умолчанию, указанная в cookbook blah-sdk), прежде чем мой атрибут override version. Поэтому неправильный URL-адрес используется для получения версии по умолчанию, а не той версии, которую я хочу. Я мог бы установить download_url в своей поваренной книге, но это нарушает инкапсуляцию кулинарной книги «blah-sdk». Я также могу в конечном итоге сыграть в битку экспериментально с некоторым длинным потоком атрибутов, прежде чем заставить его работать. Должен быть лучший способ. Что это?Разрешение атрибута у шеф-повара
поваренные/бла-SDK/атрибутов/default.rb:
default['blah']['version'] = '24.4'
default['blah']['download_url'] = "http://dl.company.com/blah/blah-sdk_r#{node['blah']['version']}-linux.tgz"
поваренные/бла-SDK/Рецепты/default.rb:
...
print("blah version: #{node['blah']['version']}")
print("blah download_url: #{node['blah']['download_url']}")
...
поваренные книги/my_cookbook/атрибуты/по умолчанию. гь:
normal['blah']['version'] = '24.4.1'
(.. Я также попытался использовать по умолчанию, force_default, переопределение и force_override Сделано никакой разницы)
поваренные книги/my_cookbook/рецепты/default.rb
...
include_recipe 'blah-sdk'
...
Выход:
==> по умолчанию: версия мля: 24.4.1
==> по умолчанию: бла DOWNLOAD_URL : http://dl.company.com/blah/blah-sdk_r24.4-linux.tgz
Код, демонстрирующий проблему, и код (если вы можете исправить третью поваренную книгу): https://github.com/marc-swingler/stackoverflow_question
Не лучшее решение, но из-за заказа, в котором загружаются атрибуты, также отбрасывается версия в роль или среду. https://christinemdraper.wordpress.com/2014/10/06/avoiding-the-possible-pitfalls-of-derived-attributes/
Использовать атрибуты обычного приоритета - это кулинарная книга-обертка и переопределять значения по умолчанию для поваренных книг. См. Пример: http://stackoverflow.com/questions/28775225/how-to-use-chef-to-update-alternatives-for-java-using-execute/28775684#28775684 –
Пробовал это. Я также попробовал force_default, override и force_override. Тот же результат. Атрибут download_url разрешается с использованием атрибута версии, определенного в кулинарной книге blah-sdk, а не той, которая определена в моей обертке. (BTW, я отредактировал вопрос, чтобы отразить ваше предложение. Надеюсь, это станет немного понятнее.) –