Chef

Chef:如果模板不存在,則為模板創建目錄

  • October 3, 2019

如果我正在創建模板,如何確保目錄存在?例如:

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

請注意,目錄資源的ownerandgroup僅在創建葉目錄時應用於葉目錄。目錄其餘部分的權限未定義,但可能是 root.root 以及您的 umask 是什麼。

引用自:https://serverfault.com/questions/486850