Chef: crea un directorio para una plantilla si aún no existe

17

Si se está creando una plantilla, ¿cómo puedo asegurarme de que el directorio existe? Por ejemplo:

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

Esto falla ya /var/www/example/shared/configque no existe para database.ymlser copiado. Estoy pensando en cómo Puppet le permite "asegurarse" de que exista un directorio.

Mateo
fuente

Respuestas:

19

Use el recurso de directorio para crear el directorio antes de crear la plantilla. El truco es especificar también el recursiveatributo; de lo contrario, la acción fallará a menos que todas las partes del directorio pero la última ya exista.

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

Tenga en cuenta que el ownery groupdel recurso de directorio solo se aplican al directorio hoja cuando se está creando. Los permisos del resto del directorio no están definidos, pero probablemente serán root.root y cualquiera que sea su umask.

Tim Potter
fuente
Es por eso que no me gusta la recursiveopción ;-)
StephenKing
Sí yo también. Simplemente no se siente muy Chef-y tener que especificar cada nivel o dejarlo todo por defecto.
Tim Potter
enlace roto nuevo enlace para recurso de directorio es este docs.chef.io/resource_directory.html
Brick
4

No conozco otra forma que no sea usar el directoryrecurso antes del templaterecurso:

directory "#{node[:app][:deploy_to]}/#{node[:app][:name]}/shared/config/
  owner node[:user][:username]
  group node[:user][:username]
end
Stephen King
fuente