Chef: crea una directory per un modello se non esiste già


16

Se ho creato un modello, come posso assicurarmi che la directory esista? Per esempio:

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

Questo non riesce poiché /var/www/example/shared/confignon esiste per database.ymlessere copiato. Sto pensando a come il burattino ti consente di "assicurare" l'esistenza di una directory.

Risposte:


18

Utilizzare la risorsa directory per creare la directory prima di creare il modello. Il trucco è anche specificare l' recursiveattributo, altrimenti l'azione fallirà a meno che tutte le parti della directory ma l'ultima non esista già.

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

Si noti che la risorsa ownere groupdella directory viene applicata alla directory foglia solo quando viene creata. Le autorizzazioni del resto della directory non sono definite, ma probabilmente saranno root.root e qualunque sia la tua umask.


Ecco perché non mi piace l' recursiveopzione ;-)
StephenKing

Si, anch'io. Semplicemente non sembra molto Chef-y dover specificare ogni livello o lasciare tutto alle impostazioni predefinite.
Tim Potter,

link non funzionante Il nuovo link per la risorsa della directory è questo docs.chef.io/resource_directory.html
Brick

4

Non sono a conoscenza di altro modo che utilizzare la directoryrisorsa prima della templaterisorsa:

directory "#{node[:app][:deploy_to]}/#{node[:app][:name]}/shared/config/
  owner node[:user][:username]
  group node[:user][:username]
end
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.