Chef
Chef:如果模板不存在,則為模板創建目錄
如果我正在創建模板,如何確保目錄存在?例如:
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
可複制的內容。我正在考慮 puppet 如何讓您“確保”目錄存在。
在創建模板之前使用目錄資源創建目錄。訣竅是還要指定
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
andgroup
僅在創建葉目錄時應用於葉目錄。目錄其餘部分的權限未定義,但可能是 root.root 以及您的 umask 是什麼。