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.

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.


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
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.