Amos Shapira
2012-Apr-26 07:55 UTC
[Puppet Users] A simple solution to the "deep directory tree" problem
Hello, Like many others, I once again had to deal with creation of deep directory trees with puppet. I did the usual: file { [ "/a", "/a/b/", "/a/b/c"...]: ensure => directory } And again got sick of it. I still didn''t find a good answer for it on the web so here is what I came up with in a moment of despair: define core::mkdirp($owner = undef, $group = undef) { exec { "mkdir -p ${name}": creates => $name, } file { $name: ensure => ''directory'', require => Exec["mkdir -p ${name}"], owner => $owner, group => $group, } } Usage: core::mkdirp { "/a/b/c/d": owner => $user, group => $group, } file { "/a/b/c/d/file.txt": require => Core::Mkdirp["/a/b/c/d"], ... } So far it works beautifully for me but I want to hear what the community thinks of it and whether there is a nicer solution I''m missing. Thanks. --Amos -- You received this message because you are subscribed to the Google Groups "Puppet Users" group. To view this discussion on the web visit https://groups.google.com/d/msg/puppet-users/-/ozFNn2oUGCQJ. To post to this group, send email to puppet-users@googlegroups.com. To unsubscribe from this group, send email to puppet-users+unsubscribe@googlegroups.com. For more options, visit this group at http://groups.google.com/group/puppet-users?hl=en.
Christopher Wood
2012-Apr-26 13:46 UTC
Re: [Puppet Users] A simple solution to the "deep directory tree" problem
I hope you have more moments of despair because that''s nifty and I''ll use it. You could possibly use ruby''s dirname and basename (http://ruby-doc.org/core-1.8.7/File.html) inside an inline template to do the directory/file split for you in a single resource. The parameters for permissions and ownership for file vs directory might get messy, though. On Thu, Apr 26, 2012 at 12:55:59AM -0700, Amos Shapira wrote:> Hello, > > Like many others, I once again had to deal with creation of deep directory > trees with puppet. I did the usual: > file { [ "/a", "/a/b/", "/a/b/c"...]: > ensure => directory > } > And again got sick of it. I still didn''t find a good answer for it on the > web so here is what I came up with in a moment of despair: > > define core::mkdirp($owner = undef, $group = undef) { > exec { "mkdir -p ${name}": > creates => $name, > } > > file { $name: > ensure => ''directory'', > require => Exec["mkdir -p ${name}"], > owner => $owner, > group => $group, > } > } > > Usage: > > core::mkdirp { "/a/b/c/d": > owner => $user, > group => $group, > } > > file { "/a/b/c/d/file.txt": > require => Core::Mkdirp["/a/b/c/d"], > ... > } > > So far it works beautifully for me but I want to hear what the community > thinks of it and whether there is a nicer solution I''m missing. > > Thanks. > > --Amos > > -- > You received this message because you are subscribed to the Google Groups > "Puppet Users" group. > To view this discussion on the web visit > [1]https://groups.google.com/d/msg/puppet-users/-/ozFNn2oUGCQJ. > To post to this group, send email to puppet-users@googlegroups.com. > To unsubscribe from this group, send email to > puppet-users+unsubscribe@googlegroups.com. > For more options, visit this group at > http://groups.google.com/group/puppet-users?hl=en. > > References > > Visible links > 1. https://groups.google.com/d/msg/puppet-users/-/ozFNn2oUGCQJ-- You received this message because you are subscribed to the Google Groups "Puppet Users" group. To post to this group, send email to puppet-users@googlegroups.com. To unsubscribe from this group, send email to puppet-users+unsubscribe@googlegroups.com. For more options, visit this group at http://groups.google.com/group/puppet-users?hl=en.