Я создал рецепт от шеф-повара, в котором упоминается установка определенного RPM. У этого rpm есть номер версии, который необходимо динамически загружать из файла свойств (который сам создается динамически). Затем этот рецепт нужно загрузить на сервер шеф-повара.
remote_file "Core_feature.rpm" do
path "#{src_loc}core_feature_v91-2.noarch.rpm"
Вот, v91-2
- это значение, которое необходимо динамически вводить в рецепт путем чтения из файла свойств.
Это достижимо? Если да, то как мне его реализовать (понятия не имею о Ruby)!
Изменить: полностью переписать из-за отрицательного голосования, но без дополнительной информации я не уверен, что именно я исправляю, поэтому вот рабочий код, который можно скопировать и вставить.
Предположим, что содержимое файла свойств размещено в /tmp/versions.properties и выглядит следующим образом:
apache=2.4.7-1ubuntu4.8
php=5.4.3
sendmail=1.2.3
Повар Поваренная книга
# Copy a file with versions
cookbook_file '/tmp/versions.properties' do
source 'versions.properties'
mode '0644'
end
# Setvar
node.default['version'] = ""
# Block where we set the command
ruby_block "set_app_id" do
block do
node.set['version'] = "apt-get install apache2=`grep -o 'apache=.*' /tmp/versions.properties | cut -f2- -d'='`"
end
action :create
end
# Do a lazy install
execute "install lazy based" do
command lazy {node[:version]}
end
В качестве бонуса, если вы работаете строго над * nix, без лени работает следующее:
# Execute straight up
execute "install lazy based" do
command "apt-get install apache2=`grep -o 'apache=.*' /tmp/versions.properties | cut -f2- -d'='`"
end
Я все еще использовал исходную предпосылку ссылок в первых двух упомянутых сообщениях:
Предполагая, что файл свойств находится на сервере (?), Вы можете использовать ленивую оценку, как описано [в этом сообщении] [1]
Изменить: Отметьте это [еще один] [2]
[1]: https://stackoverflow.com/questions/26238056/setting-chef-variable-via-a-ruby-block-not-being-executed. [2]: https://stackoverflow.com/questions/20620724/how-to-lazily-evaluate-an-arbitrary-variable-with-chef