Short story:
I tried to follow this documentation:
http://reductivelabs.com/trac/puppet/wiki/FrequentlyAskedQuestions#i-want-to-manage-a-directory-and-purge-its-contents
So I setup this rule:
file { "/etc/puppet/modules/$name":
recurse => "true",
purge => "true",
source => "puppet:///files/empty",
}
... on the puppetmaster and made sure /etc/puppet/files/empty didn't exist. And puppetd gives me this:
err: Class[main]/Node[chronos]/Puppet::Koumbit-module[rancid]/file=/etc/puppet/modules/rancid/.hg/data/manifests/ensure: change from directory to absent failed: Could not set absent on ensure: Is a directory - /etc/puppet/modules/rancid/.hg/data/manifests
Indeed, that directory exists. I also get errors like this:
notice: Class[main]/Node[chronos]/Puppet::Koumbit-module[svn]/file=/etc/puppet/modules/svn: source puppet://puppet.koumbit.net/files/empty does not exist
This happens for empty directories.
There are of course workarounds around the issue: i could just do an exec { "rm -rf" :...}, but it's much less elegant.
Here is the complete error log:
chronos:/etc/puppet/modules# puppetd --test --server puppet.koumbit.net
info: Caching configuration at /etc/puppet/localconfig.yaml
err: Already the parent of component[Class[virt_all_groups]]
notice: Starting configuration run
notice: Class[main]/file=/var/lib/puppet/modules/checksum: checksum changed '{time}Thu Feb 07 15:07:08 -0500 2008' to '{time}Thu Feb 07 15:13:26 -0500 2008'
info: Class[main]/file=/var/lib/puppet/modules/README/checksum: Sums are already equal
notice: Class[main]/file=/var/lib/puppet/modules/README/ensure: removed
notice: Class[main]/Node[chronos]/Puppet::Koumbit-module[network]/file=/etc/puppet/modules/network: source puppet://puppet.koumbit.net/files/empty does not exist
notice: Class[main]/Node[chronos]/Puppet::Koumbit-module[network]/file=/etc/puppet/modules/network: Could not retrieve information on /etc/puppet/modules/network
notice: Class[main]/Node[chronos]/Puppet::Koumbit-module[koumbit]/file=/etc/puppet/modules/koumbit: source puppet://puppet.koumbit.net/files/empty does not exist
notice: Class[main]/Node[chronos]/Puppet::Koumbit-module[koumbit]/file=/etc/puppet/modules/koumbit: Could not retrieve information on /etc/puppet/modules/koumbit
notice: Class[main]/Node[chronos]/Puppet::Koumbit-module[kerberos]/file=/etc/puppet/modules/kerberos: source puppet://puppet.koumbit.net/files/empty does not exist
notice: Class[main]/Node[chronos]/Puppet::Koumbit-module[kerberos]/file=/etc/puppet/modules/kerberos: Could not retrieve information on /etc/puppet/modules/kerberos
err: Class[main]/Node[chronos]/Puppet::Koumbit-module[kerberos]/file=/etc/puppet/modules/kerberos/templates/ensure: change from directory to absent failed: Could not set absent on ensure: Is a directory - /etc/puppet/modules/kerberos/templates
err: Class[main]/Node[chronos]/Puppet::Koumbit-module[kerberos]/file=/etc/puppet/modules/kerberos/manifests/ensure: change from directory to absent failed: Could not set absent on ensure: Is a directory - /etc/puppet/modules/kerberos/manifests
err: Class[main]/Node[chronos]/Puppet::Koumbit-module[kerberos]/file=/etc/puppet/modules/kerberos/.hg/ensure: change from directory to absent failed: Could not set absent on ensure: Is a directory - /etc/puppet/modules/kerberos/.hg
err: Class[main]/Node[chronos]/Puppet::Koumbit-module[kerberos]/file=/etc/puppet/modules/kerberos/.hg/data/ensure: change from directory to absent failed: Could not set absent on ensure: Is a directory - /etc/puppet/modules/kerberos/.hg/data
err: Class[main]/Node[chronos]/Puppet::Koumbit-module[kerberos]/file=/etc/puppet/modules/kerberos/.hg/data/files/ensure: change from directory to absent failed: Could not set absent on ensure: Is a directory - /etc/puppet/modules/kerberos/.hg/data/files
err: Class[main]/Node[chronos]/Puppet::Koumbit-module[kerberos]/file=/etc/puppet/modules/kerberos/.hg/data/templates/ensure: change from directory to absent failed: Could not set absent on ensure: Is a directory - /etc/puppet/modules/kerberos/.hg/data/templates
err: Class[main]/Node[chronos]/Puppet::Koumbit-module[kerberos]/file=/etc/puppet/modules/kerberos/.hg/data/svn/ensure: change from directory to absent failed: Could not set absent on ensure: Is a directory - /etc/puppet/modules/kerberos/.hg/data/svn
err: Class[main]/Node[chronos]/Puppet::Koumbit-module[kerberos]/file=/etc/puppet/modules/kerberos/.hg/data/svn/manifests/ensure: change from directory to absent failed: Could not set absent on ensure: Is a directory - /etc/puppet/modules/kerberos/.hg/data/svn/manifests
err: Class[main]/Node[chronos]/Puppet::Koumbit-module[kerberos]/file=/etc/puppet/modules/kerberos/.hg/data/network/ensure: change from directory to absent failed: Could not set absent on ensure: Is a directory - /etc/puppet/modules/kerberos/.hg/data/network
err: Class[main]/Node[chronos]/Puppet::Koumbit-module[kerberos]/file=/etc/puppet/modules/kerberos/.hg/data/network/templates/ensure: change from directory to absent failed: Could not set absent on ensure: Is a directory - /etc/puppet/modules/kerberos/.hg/data/network/templates
err: Class[main]/Node[chronos]/Puppet::Koumbit-module[kerberos]/file=/etc/puppet/modules/kerberos/.hg/data/network/manifests/ensure: change from directory to absent failed: Could not set absent on ensure: Is a directory - /etc/puppet/modules/kerberos/.hg/data/network/manifests
err: Class[main]/Node[chronos]/Puppet::Koumbit-module[kerberos]/file=/etc/puppet/modules/kerberos/.hg/data/network/manifests/os/ensure: change from directory to absent failed: Could not set absent on ensure: Is a directory - /etc/puppet/modules/kerberos/.hg/data/network/manifests/os
err: Class[main]/Node[chronos]/Puppet::Koumbit-module[kerberos]/file=/etc/puppet/modules/kerberos/.hg/data/modules/ensure: change from directory to absent failed: Could not set absent on ensure: Is a directory - /etc/puppet/modules/kerberos/.hg/data/modules
err: Class[main]/Node[chronos]/Puppet::Koumbit-module[kerberos]/file=/etc/puppet/modules/kerberos/.hg/data/modules/templates/ensure: change from directory to absent failed: Could not set absent on ensure: Is a directory - /etc/puppet/modules/kerberos/.hg/data/modules/templates
err: Class[main]/Node[chronos]/Puppet::Koumbit-module[kerberos]/file=/etc/puppet/modules/kerberos/.hg/data/modules/svn/ensure: change from directory to absent failed: Could not set absent on ensure: Is a directory - /etc/puppet/modules/kerberos/.hg/data/modules/svn
err: Class[main]/Node[chronos]/Puppet::Koumbit-module[kerberos]/file=/etc/puppet/modules/kerberos/.hg/data/modules/svn/manifests/ensure: change from directory to absent failed: Could not set absent on ensure: Is a directory - /etc/puppet/modules/kerberos/.hg/data/modules/svn/manifests
err: Class[main]/Node[chronos]/Puppet::Koumbit-module[kerberos]/file=/etc/puppet/modules/kerberos/.hg/data/modules/hg/ensure: change from directory to absent failed: Could not set absent on ensure: Is a directory - /etc/puppet/modules/kerberos/.hg/data/modules/hg
err: Class[main]/Node[chronos]/Puppet::Koumbit-module[kerberos]/file=/etc/puppet/modules/kerberos/.hg/data/modules/hg/manifests/ensure: change from directory to absent failed: Could not set absent on ensure: Is a directory - /etc/puppet/modules/kerberos/.hg/data/modules/hg/manifests
err: Class[main]/Node[chronos]/Puppet::Koumbit-module[kerberos]/file=/etc/puppet/modules/kerberos/.hg/data/modules/kerberos/ensure: change from directory to absent failed: Could not set absent on ensure: Is a directory - /etc/puppet/modules/kerberos/.hg/data/modules/kerberos
err: Class[main]/Node[chronos]/Puppet::Koumbit-module[kerberos]/file=/etc/puppet/modules/kerberos/.hg/data/modules/kerberos/templates/ensure: change from directory to absent failed: Could not set absent on ensure: Is a directory - /etc/puppet/modules/kerberos/.hg/data/modules/kerberos/templates
err: Class[main]/Node[chronos]/Puppet::Koumbit-module[kerberos]/file=/etc/puppet/modules/kerberos/.hg/data/modules/kerberos/manifests/ensure: change from directory to absent failed: Could not set absent on ensure: Is a directory - /etc/puppet/modules/kerberos/.hg/data/modules/kerberos/manifests
err: Class[main]/Node[chronos]/Puppet::Koumbit-module[kerberos]/file=/etc/puppet/modules/kerberos/.hg/data/modules/puppet/ensure: change from directory to absent failed: Could not set absent on ensure: Is a directory - /etc/puppet/modules/kerberos/.hg/data/modules/puppet
err: Class[main]/Node[chronos]/Puppet::Koumbit-module[kerberos]/file=/etc/puppet/modules/kerberos/.hg/data/modules/puppet/templates/ensure: change from directory to absent failed: Could not set absent on ensure: Is a directory - /etc/puppet/modules/kerberos/.hg/data/modules/puppet/templates
err: Class[main]/Node[chronos]/Puppet::Koumbit-module[kerberos]/file=/etc/puppet/modules/kerberos/.hg/data/modules/puppet/manifests/ensure: change from directory to absent failed: Could not set absent on ensure: Is a directory - /etc/puppet/modules/kerberos/.hg/data/modules/puppet/manifests
err: Class[main]/Node[chronos]/Puppet::Koumbit-module[kerberos]/file=/etc/puppet/modules/kerberos/.hg/data/hg/ensure: change from directory to absent failed: Could not set absent on ensure: Is a directory - /etc/puppet/modules/kerberos/.hg/data/hg
err: Class[main]/Node[chronos]/Puppet::Koumbit-module[kerberos]/file=/etc/puppet/modules/kerberos/.hg/data/hg/manifests/ensure: change from directory to absent failed: Could not set absent on ensure: Is a directory - /etc/puppet/modules/kerberos/.hg/data/hg/manifests
err: Class[main]/Node[chronos]/Puppet::Koumbit-module[kerberos]/file=/etc/puppet/modules/kerberos/.hg/data/manifests/ensure: change from directory to absent failed: Could not set absent on ensure: Is a directory - /etc/puppet/modules/kerberos/.hg/data/manifests
err: Class[main]/Node[chronos]/Puppet::Koumbit-module[kerberos]/file=/etc/puppet/modules/kerberos/.hg/data/kerberos/ensure: change from directory to absent failed: Could not set absent on ensure: Is a directory - /etc/puppet/modules/kerberos/.hg/data/kerberos
err: Class[main]/Node[chronos]/Puppet::Koumbit-module[kerberos]/file=/etc/puppet/modules/kerberos/.hg/data/kerberos/templates/ensure: change from directory to absent failed: Could not set absent on ensure: Is a directory - /etc/puppet/modules/kerberos/.hg/data/kerberos/templates
err: Class[main]/Node[chronos]/Puppet::Koumbit-module[kerberos]/file=/etc/puppet/modules/kerberos/.hg/data/kerberos/manifests/ensure: change from directory to absent failed: Could not set absent on ensure: Is a directory - /etc/puppet/modules/kerberos/.hg/data/kerberos/manifests
err: Class[main]/Node[chronos]/Puppet::Koumbit-module[kerberos]/file=/etc/puppet/modules/kerberos/.hg/data/puppet/ensure: change from directory to absent failed: Could not set absent on ensure: Is a directory - /etc/puppet/modules/kerberos/.hg/data/puppet
err: Class[main]/Node[chronos]/Puppet::Koumbit-module[kerberos]/file=/etc/puppet/modules/kerberos/.hg/data/puppet/files/ensure: change from directory to absent failed: Could not set absent on ensure: Is a directory - /etc/puppet/modules/kerberos/.hg/data/puppet/files
err: Class[main]/Node[chronos]/Puppet::Koumbit-module[kerberos]/file=/etc/puppet/modules/kerberos/.hg/data/puppet/templates/ensure: change from directory to absent failed: Could not set absent on ensure: Is a directory - /etc/puppet/modules/kerberos/.hg/data/puppet/templates
err: Class[main]/Node[chronos]/Puppet::Koumbit-module[kerberos]/file=/etc/puppet/modules/kerberos/.hg/data/puppet/manifests/ensure: change from directory to absent failed: Could not set absent on ensure: Is a directory - /etc/puppet/modules/kerberos/.hg/data/puppet/manifests
notice: Class[main]/Node[chronos]/Puppet::Koumbit-module[rancid]/file=/etc/puppet/modules/rancid: source puppet://puppet.koumbit.net/files/empty does not exist
notice: Class[main]/Node[chronos]/Puppet::Koumbit-module[rancid]/file=/etc/puppet/modules/rancid: Could not retrieve information on /etc/puppet/modules/rancid
err: Class[main]/Node[chronos]/Puppet::Koumbit-module[rancid]/file=/etc/puppet/modules/rancid/files/ensure: change from directory to absent failed: Could not set absent on ensure: Is a directory - /etc/puppet/modules/rancid/files
err: Class[main]/Node[chronos]/Puppet::Koumbit-module[rancid]/file=/etc/puppet/modules/rancid/manifests/ensure: change from directory to absent failed: Could not set absent on ensure: Is a directory - /etc/puppet/modules/rancid/manifests
err: Class[main]/Node[chronos]/Puppet::Koumbit-module[rancid]/file=/etc/puppet/modules/rancid/.hg/ensure: change from directory to absent failed: Could not set absent on ensure: Is a directory - /etc/puppet/modules/rancid/.hg
err: Class[main]/Node[chronos]/Puppet::Koumbit-module[rancid]/file=/etc/puppet/modules/rancid/.hg/data/ensure: change from directory to absent failed: Could not set absent on ensure: Is a directory - /etc/puppet/modules/rancid/.hg/data
err: Class[main]/Node[chronos]/Puppet::Koumbit-module[rancid]/file=/etc/puppet/modules/rancid/.hg/data/files/ensure: change from directory to absent failed: Could not set absent on ensure: Is a directory - /etc/puppet/modules/rancid/.hg/data/files
err: Class[main]/Node[chronos]/Puppet::Koumbit-module[rancid]/file=/etc/puppet/modules/rancid/.hg/data/manifests/ensure: change from directory to absent failed: Could not set absent on ensure: Is a directory - /etc/puppet/modules/rancid/.hg/data/manifests
notice: Class[main]/Node[chronos]/Puppet::Koumbit-module[svn]/file=/etc/puppet/modules/svn: source puppet://puppet.koumbit.net/files/empty does not exist
notice: Class[main]/Node[chronos]/Puppet::Koumbit-module[svn]/file=/etc/puppet/modules/svn: Could not retrieve information on /etc/puppet/modules/svn
notice: Class[main]/Node[chronos]/Puppet::Koumbit-module[postfix]/file=/etc/puppet/modules/postfix: source puppet://puppet.koumbit.net/files/empty does not exist
notice: Class[main]/Node[chronos]/Puppet::Koumbit-module[postfix]/file=/etc/puppet/modules/postfix: Could not retrieve information on /etc/puppet/modules/postfix
notice: Finished configuration run in 11.41 seconds
The filesystem state on the client:
chronos:/etc/puppet/modules# find
.
./koumbit
./svn
./apt
./apt/files
./apt/files/backports.org.key
./apt/templates
./apt/templates/preferences.erb
./apt/templates/sources.list.erb
./apt/manifests
./apt/manifests/init.pp
./apt/.git
./apt/.git/objects
./apt/.git/objects/pack
./apt/.git/objects/pack/pack-c526497258c3622e501f880422e816829742c088.idx
./apt/.git/objects/pack/pack-c526497258c3622e501f880422e816829742c088.pack
./apt/.git/objects/info
./apt/.git/description
./apt/.git/config
./apt/.git/refs
./apt/.git/refs/tags
./apt/.git/refs/heads
./apt/.git/refs/heads/master
./apt/.git/refs/heads/origin
./apt/.git/remotes
./apt/.git/remotes/origin
./apt/.git/branches
./apt/.git/info
./apt/.git/info/exclude
./apt/.git/HEAD
./apt/.git/index
./apt/.git/hooks
./apt/.git/hooks/pre-commit
./apt/.git/hooks/pre-applypatch
./apt/.git/hooks/pre-rebase
./apt/.git/hooks/post-commit
./apt/.git/hooks/post-update
./apt/.git/hooks/commit-msg
./apt/.git/hooks/update
./apt/.git/hooks/applypatch-msg
./apt/README
./postfix
./nagios
./nagios/files
./nagios/files/hostgroups_nagios2.cfg
./nagios/templates
./nagios/templates/command.erb
./nagios/templates/host.erb
./nagios/templates/service.erb
./nagios/manifests
./nagios/manifests/init.pp
./nagios/.git
./nagios/.git/objects
./nagios/.git/objects/pack
./nagios/.git/objects/pack/pack-d27ec6fe908901010b1a73cff96ffe474ea8f963.idx
./nagios/.git/objects/pack/pack-d27ec6fe908901010b1a73cff96ffe474ea8f963.pack
./nagios/.git/objects/info
./nagios/.git/description
./nagios/.git/config
./nagios/.git/refs
./nagios/.git/refs/tags
./nagios/.git/refs/heads
./nagios/.git/refs/heads/master
./nagios/.git/refs/heads/origin
./nagios/.git/remotes
./nagios/.git/remotes/origin
./nagios/.git/branches
./nagios/.git/info
./nagios/.git/info/exclude
./nagios/.git/HEAD
./nagios/.git/index
./nagios/.git/hooks
./nagios/.git/hooks/pre-commit
./nagios/.git/hooks/pre-applypatch
./nagios/.git/hooks/pre-rebase
./nagios/.git/hooks/post-commit
./nagios/.git/hooks/post-update
./nagios/.git/hooks/commit-msg
./nagios/.git/hooks/update
./nagios/.git/hooks/applypatch-msg
./nagios/README
./network
./common
./common/files
./common/files/modules
./common/files/modules/README
./common/plugins
./common/plugins/facter
./common/plugins/facter/netmask.rb
./common/plugins/puppet
./common/plugins/puppet/parser
./common/plugins/puppet/parser/functions
./common/plugins/puppet/parser/functions/sha1.rb
./common/plugins/puppet/parser/functions/basename.rb
./common/plugins/puppet/parser/functions/re_escape.rb
./common/plugins/puppet/parser/functions/split.rb
./common/plugins/puppet/parser/functions/slash_escape.rb
./common/plugins/puppet/parser/functions/gsub.rb
./common/plugins/puppet/parser/functions/dirname.rb
./common/manifests
./common/manifests/classes
./common/manifests/classes/lsb_release.pp
./common/manifests/init.pp
./common/manifests/defines
./common/manifests/defines/config_file.pp
./common/manifests/defines/modules_file.pp
./common/manifests/defines/line.pp
./common/manifests/defines/replace.pp
./common/manifests/defines/concatenated_file.pp
./common/manifests/defines/modules_dir.pp
./common/.git
./common/.git/objects
./common/.git/objects/pack
./common/.git/objects/pack/pack-08cac6aa4e842150258c22c1816ad70b674a9640.pack
./common/.git/objects/pack/pack-08cac6aa4e842150258c22c1816ad70b674a9640.idx
./common/.git/objects/info
./common/.git/description
./common/.git/config
./common/.git/refs
./common/.git/refs/tags
./common/.git/refs/heads
./common/.git/refs/heads/master
./common/.git/refs/heads/origin
./common/.git/remotes
./common/.git/remotes/origin
./common/.git/branches
./common/.git/info
./common/.git/info/exclude
./common/.git/HEAD
./common/.git/index
./common/.git/hooks
./common/.git/hooks/pre-commit
./common/.git/hooks/pre-applypatch
./common/.git/hooks/pre-rebase
./common/.git/hooks/post-commit
./common/.git/hooks/post-update
./common/.git/hooks/commit-msg
./common/.git/hooks/update
./common/.git/hooks/applypatch-msg
./common/README
./rancid
./rancid/files
./rancid/manifests
./rancid/.hg
./rancid/.hg/data
./rancid/.hg/data/files
./rancid/.hg/data/manifests
./virtual
./virtual/files
./virtual/files/build_vserver
./virtual/files/munin
./virtual/files/munin/xen_mem
./virtual/files/munin/xen_vm
./virtual/templates
./virtual/templates/cron.hourly.vserver
./virtual/plugins
./virtual/plugins/facter
./virtual/plugins/facter/virtual.rb
./virtual/plugins/facter/vserver.rb
./virtual/manifests
./virtual/manifests/vserver.pp
./virtual/manifests/init.pp
./virtual/manifests/xen.pp
./virtual/.git
./virtual/.git/objects
./virtual/.git/objects/pack
./virtual/.git/objects/pack/pack-5f0779cf46e98acc4c05bef987fe11e05fb86848.pack
./virtual/.git/objects/pack/pack-5f0779cf46e98acc4c05bef987fe11e05fb86848.idx
./virtual/.git/objects/info
./virtual/.git/description
./virtual/.git/config
./virtual/.git/refs
./virtual/.git/refs/tags
./virtual/.git/refs/heads
./virtual/.git/refs/heads/master
./virtual/.git/refs/heads/origin
./virtual/.git/remotes
./virtual/.git/remotes/origin
./virtual/.git/branches
./virtual/.git/info
./virtual/.git/info/exclude
./virtual/.git/HEAD
./virtual/.git/index
./virtual/.git/hooks
./virtual/.git/hooks/pre-commit
./virtual/.git/hooks/pre-applypatch
./virtual/.git/hooks/pre-rebase
./virtual/.git/hooks/post-commit
./virtual/.git/hooks/post-update
./virtual/.git/hooks/commit-msg
./virtual/.git/hooks/update
./virtual/.git/hooks/applypatch-msg
./virtual/README
./kerberos
./kerberos/templates
./kerberos/manifests
./kerberos/.hg
./kerberos/.hg/data
./kerberos/.hg/data/files
./kerberos/.hg/data/templates
./kerberos/.hg/data/svn
./kerberos/.hg/data/svn/manifests
./kerberos/.hg/data/network
./kerberos/.hg/data/network/templates
./kerberos/.hg/data/network/manifests
./kerberos/.hg/data/network/manifests/os
./kerberos/.hg/data/modules
./kerberos/.hg/data/modules/templates
./kerberos/.hg/data/modules/svn
./kerberos/.hg/data/modules/svn/manifests
./kerberos/.hg/data/modules/hg
./kerberos/.hg/data/modules/hg/manifests
./kerberos/.hg/data/modules/kerberos
./kerberos/.hg/data/modules/kerberos/templates
./kerberos/.hg/data/modules/kerberos/manifests
./kerberos/.hg/data/modules/puppet
./kerberos/.hg/data/modules/puppet/templates
./kerberos/.hg/data/modules/puppet/manifests
./kerberos/.hg/data/hg
./kerberos/.hg/data/hg/manifests
./kerberos/.hg/data/manifests
./kerberos/.hg/data/kerberos
./kerberos/.hg/data/kerberos/templates
./kerberos/.hg/data/kerberos/manifests
./kerberos/.hg/data/puppet
./kerberos/.hg/data/puppet/files
./kerberos/.hg/data/puppet/templates
./kerberos/.hg/data/puppet/manifests