Chef : 템플릿이없는 경우 템플릿 용 디렉토리를 만듭니다. 예를 들어 : template “#{node[:app][:deploy_to]}/#{node[:app][:name]}/shared/config/database.yml” do

템플릿을 작성하는 경우 디렉토리가 존재하는지 어떻게 확인할 수 있습니까? 예를 들어 :

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

점을 유의 ownergroup가 생성 될 때 디렉토리 자원의 만 잎 디렉토리에 적용됩니다. 나머지 디렉토리의 권한은 정의되어 있지 않지만 root.root 및 umask가 무엇이든 가능합니다.


답변

directory리소스 전에 리소스를 사용하는 것 이외의 다른 방법은 없습니다 template.

directory "#{node[:app][:deploy_to]}/#{node[:app][:name]}/shared/config/
  owner node[:user][:username]
  group node[:user][:username]
end


답변