Я пытаюсь создать рецепт шеф-повара, который будет динамически создавать ресурсы на основе содержимого файла yaml, загруженного из репозитория git с исходным кодом приложения. У меня это до сих пор:Динамическое создание ресурсов у шеф-повара
git "/home/a_user/#{ node[:my_node][:application] }" do
repository node[:my_node][:git_repository]
revision node[:my_node][:git_branch]
action :sync
user "a_user"
group "a_user"
end
require 'yaml'
ruby_block "load the process into the node" do
block do
yml = YAML::load(File.open("/home/a_user/#{node[:my_node][:application]}/processes.yml"))
node.set[:my_node][:worker][:processes] = yml[:processes]
end
subscribes :create, "git[/home/a_user/#{ node[:my_node][:application] }]" :immediately
end
node[:my_node][:worker][:processes].each do | name, cmd |
supervisor_service name do
command "bash -c \"source /home/a_user/.profile && #{ cmd }\""
action :enable
end
end
service "supervisor" do
action :restart
end
Формат YAML файла:
processes:
process_a: python myscript.py --a
process_b: python myscript.py --b
Однако, когда я исполню ее значение node[:my_node][:worker][:processes]
пуст на этапе компиляции, так что супервайзер ресурсы не выполняются на этапе выполнения.
Может ли кто-нибудь дать мне указатель на то, как это сделать? Я пропускаю что-то очевидное или я просто делаю это неправильно?
Вы можете захотеть, чтобы проверить мой [диалектов филиал] (https://github.com/coderanger/chef/tree/dialects) и [предложение за ним] (https://gist.github.com/coderanger/a6e0c627d349f0712dcc). Это позволит создавать рецепты в Yaml, если вы создадите плагин. – coderanger