Şef: henüz mevcut değilse bir şablon için dizin oluşturun


17

Oluşturulmakta olan bir şablonum varsa dizinin var olmasını nasıl sağlayabilirim? Örneğin:

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

Kopyalanacağı /var/www/example/shared/configiçin mevcut olmadığından bu başarısız olur database.yml. Ben kukla bir dizin var "sağlamak" sağlar nasıl düşünüyorum.

Yanıtlar:


19

Şablonu oluşturmadan önce dizini oluşturmak için dizin kaynağını kullanın . Hile de recursiveözniteliği belirtmektir, aksi takdirde dizinin son parçaları hariç tüm bölümleri zaten mevcut değilse eylem başarısız olur.

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

O Not ownerve groupbunun yarattığı varlık zaman dizin kaynağın sadece yaprak dizinine uygulanır. Dizinin geri kalanının izinleri tanımsız, ancak muhtemelen root.root ve umask'niz ne olursa olsun.


Bu yüzden recursive;-)
beğenmiyorum

Evet ben de. Sadece her seviye belirtmek ya da hepsini varsayılanlara bırakmak zorunda çok Chef-y hissetmiyor.
Tim Potter

bağlantı kesildi dizin kaynak için yeni bağlantı bu docs.chef.io/resource_directory.html
Tuğla

4

Kaynaktan directoryönce kaynağı kullanmaktan başka bir yolun farkında değilim template:

directory "#{node[:app][:deploy_to]}/#{node[:app][:name]}/shared/config/
  owner node[:user][:username]
  group node[:user][:username]
end
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.