Si j'ai créé un modèle, comment puis-je vous assurer que le répertoire existe? Par exemple:
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
Cela échoue depuis /var/www/example/shared/config
n'existe pas pour database.yml
à copier dans. Je pense comment la marionnette vous permet de "assurer" un répertoire existant.
Utilisez la Ressource de répertoire pour créer le répertoire avant de créer le modèle. L'astuce consiste également à spécifier l'attribut recursive
, sinon l'action échouera à moins que toutes les parties du répertoire, mais elles existent déjà.
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
Notez que le owner
et group
de la ressource de répertoire ne sont appliqués que sur le répertoire des feuilles lors de sa création. Les autorisations du reste du répertoire sont indéfinies, mais seront probablement root.root et quel que soit votre monask.
Je ne suis pas au courant d'une autre manière que d'utiliser la ressource directory
avant la ressource template
:
directory "#{node[:app][:deploy_to]}/#{node[:app][:name]}/shared/config/
owner node[:user][:username]
group node[:user][:username]
end