Đầu bếp: tạo một thư mục cho một mẫu nếu nó không tồn tại


16

Nếu tôi có một mẫu được tạo, làm thế nào tôi có thể đảm bảo rằng thư mục tồn tại? Ví dụ:

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

Điều này thất bại vì /var/www/example/shared/configkhông tồn tại database.ymlđể được sao chép vào. Tôi đang nghĩ về cách con rối cho phép bạn "đảm bảo" một thư mục tồn tại.

Câu trả lời:


18

Sử dụng tài nguyên thư mục để tạo thư mục trước khi tạo mẫu. Bí quyết là cũng chỉ định recursivethuộc tính nếu không hành động sẽ thất bại trừ khi tất cả các phần của thư mục nhưng tồn tại cuối cùng.

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

Lưu ý rằng ownergroupcủa tài nguyên thư mục chỉ được áp dụng cho thư mục lá khi nó được tạo. Các quyền của phần còn lại của thư mục không được xác định, nhưng có thể sẽ là root.root và bất kể ô của bạn là gì.


Đó là lý do tại sao tôi không thích recursivetùy chọn này ;-)
StephenKing

Vâng - tôi cũng vậy. Nó chỉ không cảm thấy rất Chef-y hoặc phải chỉ định từng cấp độ hoặc để tất cả các mặc định.
Tim Potter

liên kết bị hỏng liên kết mới cho tài nguyên thư mục là docs.chef.io/resource_directory.html
Gạch không thay đổi

4

Tôi không biết cách nào khác ngoài việc sử dụng directorytài nguyên trước templatetài nguyên:

directory "#{node[:app][:deploy_to]}/#{node[:app][:name]}/shared/config/
  owner node[:user][:username]
  group node[:user][:username]
end
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.