Если у меня создается шаблон, как я могу убедиться, что каталог существует? Например:
template "#{node[:app][:deploy_to]}/#{node[:app][:name]}/shared/config/database.yml" do
source 'database.yml.erb'
owner node[:user][:username]
group node[:user][:username]
mode 0644
variables({
:environment => node[:app][:environment],
:adapter => node[:database][:adapter],
:database => node[:database][:name],
:username => node[:database][:username],
:password => node[:database][:password],
:host => node[:database][:host]
})
end
Это не удается, поскольку /var/www/example/shared/config
не существует для database.yml
для копирования в. Я думаю о том, как puppet позволяет вам «гарантировать» существование каталога.
Использовать ресурс каталога для создания каталога перед созданием шаблона. Уловка состоит в том, чтобы также указать recursive
В противном случае действие завершится ошибкой, если все части каталога, кроме последней, уже существуют.
config_dir = "#{node[:app][:deploy_to]}/#{node[:app][:name]}/shared/config"
directory config_dir do
owner node[:user][:username]
group node[:user][:username]
recursive true
end
template "#{config_dir}/database.yml" do
source "database.yml.erb"
...
end
Обратите внимание, что owner
и group
ресурса каталога применяются только к конечному каталогу при его создании. Разрешения для остальной части каталога не определены, но, вероятно, это будет root.root и какая у вас маска umask.
Я не знаю другого способа, кроме использования directory
ресурс до template
ресурс:
directory "#{node[:app][:deploy_to]}/#{node[:app][:name]}/shared/config/
owner node[:user][:username]
group node[:user][:username]
end