Создайте рецепт шеф-повара, динамически передавая значения из файла свойств

Я создал рецепт шеф-повара, в котором упоминается установка определенного оборота. Этот rpm имеет номер версии, который необходимо динамически загружать из файла свойств (который сам создается динамически). Затем этот рецепт шеф-повара необходимо загрузить на сервер шеф-повара.

remote_file "Core_feature.rpm" do
path   "#{src_loc}core_feature_v91-2.noarch.rpm"

Здесь v91-2 — это значение, которое необходимо динамически ввести в рецепт путем чтения из файла свойств.

Это достижимо? Если да, то как мне его реализовать? (Понятия не имею о рубине)!


person Anuj Balan    schedule 06.07.2015    source источник
comment
Почему? По какой причине у вас есть файл свойств по сравнению с существующими файлами атрибутов, которые являются родными для Chef?   -  person Tejay Cardon    schedule 07.07.2015
comment
Приложение запускает задание Jenkins со всеми атрибутами, введенными пользователем. У него есть версия основного пакета, которая будет установлена ​​в узле. Таким образом, файл рецепта должен отражать эту версию.   -  person Anuj Balan    schedule 07.07.2015
comment
И вы упустили точку зрения Теджая. Почему бы вам не установить версию как атрибут шеф-повара. Это было бы родным для шеф-повара.   -  person Mark O'Connor    schedule 07.07.2015
comment
Теперь этот список атрибутов находится внутри поваренной книги, которая уже находится на сервере Chef, верно? Но как установить для него значение? path #{src_loc}core_feature_{version}.noarch.rpm Смогу ли я передать ему версию, установить ее и затем загрузить на Chef Server? Может мое понимание неправильно?   -  person Anuj Balan    schedule 07.07.2015


Ответы (1)


У вас есть несколько вариантов. На мой взгляд, лучше всего использовать файл json, а не файл свойств. Затем вы можете использовать флаг -j в вызове chef-client для чтения файла json в качестве атрибутов normal на вашем узле. Основное предостережение заключается в том, что атрибуты normal сохраняются от одного запуска шеф-повара к другому, поэтому вам нужно убедиться, что они переустанавливаются при каждом запуске шеф-повара.

В качестве альтернативы вы можете заставить Дженкинса использовать нож для установки атрибутов непосредственно на узле. Вам понадобится плагин knife node attribute set .... ИЛИ вы можете установить его для среды или роли, если это жизнеспособные варианты, но они будут включать в себя извлечение среды или роли с сервера, их изменение, а затем отправку обратно.

Другой вариант — использовать ruby ​​для чтения вашего файла свойств как части вашего файла attribute/xxxx.rb. Затем вы можете установить из него атрибуты узла на любом уровне прецедента, который вы хотите.

атрибуты /default.rb

properties = IO.read('/path/to/properties/file')
# parse properties and set node attributes like this
node.default[:something] = <your value>
person Tejay Cardon    schedule 07.07.2015
comment
В моем случае запуск шеф-клиента происходит через vagrant, и это происходит один раз, чтобы запустить виртуальную машину. Поэтому редактирование его для каждого запуска для подачи динамически сгенерированного файла json не будет работать. Мне было интересно узнать о варианте 2. Мы можем отредактировать список атрибутов на сервере шеф-повара до того, как vagrant запустится ли клиент-шеф-повар на виртуальной машине? В этом случае я могу попытаться добавить и удалить атрибуты до того, как виртуальная машина будет запущена, и после того, как виртуальная машина будет уничтожена. Как мне заставить Дженкинса управлять всем этим? - person Anuj Balan; 07.07.2015
comment
Но означает ли добавление атрибутов редактирование рецепта шеф-повара для упоминания конкретной версии какого-либо пакета? (Недавно начал экспериментировать с Chef) - person Anuj Balan; 07.07.2015
comment
Это зависит от того, как вы добавляете атрибуты. Если у вас есть код ruby ​​в вашем файле атрибутов, вы можете заставить этот код ruby ​​действовать динамически. - person Tejay Cardon; 07.07.2015
comment
Если у вас есть jenkins, вызывающий бродягу, тогда вы можете сделать бродячий файл динамическим. Затем вы можете добавить свои атрибуты непосредственно в шеф-повар в файле vagrant. - person Tejay Cardon; 07.07.2015