템플릿을 작성하는 경우 디렉토리가 존재하는지 어떻게 확인할 수 있습니까? 예를 들어 :
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
. 꼭두각시가 디렉토리를 “확보”하는 방법을 생각하고 있습니다.
답변
사용 디렉토리 자원을 템플릿을 작성하기 전에 디렉토리를 만들 수 있습니다. 트릭은 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