Chef : 템플릿이없는 경우 템플릿 용 디렉토리를 만듭니다.


17

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

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. 꼭두각시가 디렉토리를 "확보"하는 방법을 생각하고 있습니다.

답변:


19

사용 디렉토리 자원을 템플릿을 작성하기 전에 디렉토리를 만들 수 있습니다. 트릭은 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가 무엇이든 가능합니다.


그래서 내가 recursive옵션을 싫어하는 이유 ;-)
StephenKing

맞아요 저도 요. 그것은 단지 Chef-y가 각 레벨을 지정하거나 기본값을 그대로 두어야한다고 느끼지 않습니다.
Tim Potter

링크 깨진 디렉토리 리소스에 대한 새 링크는 다음과 같습니다. docs.chef.io/resource_directory.html
Immutable Brick

4

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

directory "#{node[:app][:deploy_to]}/#{node[:app][:name]}/shared/config/
  owner node[:user][:username]
  group node[:user][:username]
end
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.