summaryrefslogtreecommitdiffstats
path: root/lib/puppet/indirector/checksum/file.rb
blob: 3b196a1f86494ceb758dd7b9ce5067cc32e7c742 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
require 'puppet/checksum'
require 'puppet/indirector/file'

class Puppet::Checksum::File < Puppet::Indirector::File
    desc "Store files in a directory set based on their checksums."

    def initialize
        Puppet.settings.use(:filebucket)
    end

    def path(checksum)
        path = []
        path << Puppet[:bucketdir]                              # Start with the base directory
        path << checksum[0..7].split("").join(File::SEPARATOR)  # Add sets of directories based on the checksum
        path << checksum                                        # And the full checksum name itself
        path << "contents"                                      # And the actual file name

        path.join(File::SEPARATOR)
    end

    def save(file)
        path = File.dirname(path(file.name))

        # Make the directories if necessary.
        unless FileTest.directory?(path)
            Puppet::Util.withumask(0007) do
                FileUtils.mkdir_p(path)
            end
        end

        super
    end
end