テンプレートを作成している場合、ディレクトリが存在することをどのように確認できますか?例えば:
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
が存在しないため、これは失敗します。人形がディレクトリの存在を「保証」する方法を考えています。
テンプレートを作成する前に、 directory resource を使用してディレクトリを作成します。トリックは、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