Как создать template из ruby_block в chef-opscode

Иногда нужно создать template во время исполнения ruby_block.
Вот как это можно сделать.


ruby_block "bla-bla" do
block do

[ruby_code.....]

cl = Chef::CookbookLoader.new(Chef::Config[:cookbook_path])
cl.load_cookbooks
cookbook_collection = Chef::CookbookCollection.new(cl)
@events = Chef::EventDispatch::Dispatcher.new()
rc = Chef::RunContext.new(node, cookbook_collection, @events)
t = Chef::Resource::Template.new "TEMPLATE_NAME"
t.source("TEMPLATE_SOURCE.erb")
t.cookbook("COOKBOOK_NAME")
t.owner(OWNER)
t.mode("0755")
t.variables({VARIABLES})
t.action(:create)
t.run_context=(rc)
t.run_action("create")

end
action :create
end

Мне это помогло.
Есть одно НО.
Если cookbook загружается на ноде впервые, то темплейта в локальном кеше может не оказаться.
Это можно решить так — вызвать темплейт перед руби блоком и сказать что бы он создался например в /tmp/ и тогда не будет проблем.
Если у кого то есть более элегантное решение — буду благодарен за совет!

Решение найдено здесь: https://gist.github.com/ctgswallow/3409231

chef-opscode template

Comments are closed.