如果我正在创建一个模板,如何确保该目录存在?例如:
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 如何允许您“确保”目录存在。
答案1
使用目录资源在创建模板之前创建目录。诀窍是还要指定属性,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
和group
仅在创建时应用于叶目录。目录其余部分的权限未定义,但可能是 root.root 和您的 umask。
答案2
directory
除了在资源之前使用资源之外,我不知道还有其他方法template
:
directory "#{node[:app][:deploy_to]}/#{node[:app][:name]}/shared/config/
owner node[:user][:username]
group node[:user][:username]
end