Chef: buat direktori untuk templat jika belum ada


16

Jika saya memiliki template yang dibuat, bagaimana saya bisa memastikan bahwa direktori itu ada? Contohnya:

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

Ini gagal karena /var/www/example/shared/configtidak ada untuk database.ymldisalin. Saya sedang memikirkan bagaimana boneka memungkinkan Anda untuk "memastikan" ada direktori.

Jawaban:


18

Gunakan sumber daya direktori untuk membuat direktori sebelum membuat templat. Caranya adalah dengan juga menentukan recursiveatribut jika tidak tindakan akan gagal kecuali semua bagian direktori tetapi yang terakhir sudah ada.

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

Perhatikan bahwa ownerdan groupdari sumber daya direktori hanya diterapkan ke direktori daun ketika sedang dibuat. Izin dari seluruh direktori tidak ditentukan, tetapi mungkin akan menjadi root.root dan apa pun umask Anda.


Itu sebabnya saya tidak suka recursiveopsi ;-)
StephenKing

Ya saya juga. Hanya saja rasanya tidak terlalu Chef-y harus menentukan setiap level atau membiarkannya secara default.
Tim Potter

tautan rusak tautan baru untuk sumber daya direktori adalah docs.chef.io/resource_directory.html
Brick

4

Saya tidak mengetahui cara lain selain menggunakan directorysumber daya sebelum templatesumber daya:

directory "#{node[:app][:deploy_to]}/#{node[:app][:name]}/shared/config/
  owner node[:user][:username]
  group node[:user][:username]
end
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.