summaryrefslogtreecommitdiffstats
path: root/lib/puppet/util/fact_store.rb
blob: a93aa4265742734a551d9148d4f99d19c6e0d69a (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
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
# Created on 2007-05-02
# Copyright Luke Kanies

module Puppet::Util
    # The abstract base class for client fact storage.
    class FactStore
        extend Puppet::Util
        extend Puppet::Util::Docs
        extend Puppet::Util::ClassGen

        @loader = Puppet::Util::Autoload.new(self, "puppet/fact_stores")
        @stores = {}

        # Add a new report type.
        def self.newstore(name, options = {}, &block)
            klass = genclass(name,
                :block => block,
                :prefix => "FactStore",
                :hash => @stores,
                :attributes => options
            )
        end

        # Remove a store; really only used for testing.
        def self.rmstore(name)
            rmclass(name, :hash => @stores)
        end

        # Load a store.
        def self.store(name)
            name = symbolize(name)
            unless @stores.include? name
                if @loader.load(name)
                    unless @stores.include? name
                        Puppet.warning(
                            "Loaded report file for %s but report was not defined" %
                            name
                        )
                        return nil
                    end
                else
                    return nil
                end
            end
            @stores[name]
        end

        # Retrieve the facts for a node.
        def get(node)
            raise Puppet::DevError, "%s has not overridden get" % self.class.name
        end

        # Set the facts for a node.
        def set(node, facts)
            raise Puppet::DevError, "%s has not overridden set" % self.class.name
        end
    end
end