summaryrefslogtreecommitdiffstats
path: root/lib/puppet/application/puppetqd.rb
blob: 05bb21fe98f63e1a7e4defdd33c8127aba48102f (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
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
require 'puppet'
require 'puppet/daemon'
require 'puppet/application'
require 'puppet/resource/catalog'
require 'puppet/indirector/catalog/queue'

Puppet::Application.new(:puppetqd) do
    should_parse_config

    attr_accessor :daemon

    preinit do
        @daemon = Puppet::Daemon.new
        @daemon.argv = ARGV.dup

        # Do an initial trap, so that cancels don't get a stack trace.
        trap(:INT) do
            $stderr.puts "Cancelling startup"
            exit(0)
        end

        {
            :verbose => false,
            :debug => false
        }.each do |opt,val|
            options[opt] = val
        end
    end

    option("--debug","-d")
    option("--verbose","-v")

    command(:main) do
        Puppet::Resource::Catalog::Queue.subscribe do |catalog|
            # Once you have a Puppet::Resource::Catalog instance, calling save() on it should suffice
            # to put it through to the database via its active_record indirector (which is determined
            # by the terminus_class = :active_record setting above)
            Puppet.notice "Processing queued catalog for %s" % catalog.name
            catalog.save
        end

        sleep_forever()
    end

    # Handle the logging settings.
    def setup_logs
        if options[:debug] or options[:verbose]
            Puppet::Util::Log.newdestination(:console)
            if options[:debug]
                Puppet::Util::Log.level = :debug
            else
                Puppet::Util::Log.level = :info
            end
        end
    end

    setup do
        unless Puppet.features.stomp?
            raise ArgumentError, "Could not load the 'stomp' library, which must be present for queueing to work.  You must install the required library."
        end

        setup_logs

        if Puppet.settings.print_configs?
            exit(Puppet.settings.print_configs ? 0 : 1)
        end

        Puppet::Resource::Catalog.terminus_class = :active_record

        daemon.daemonize if Puppet[:daemonize]
    end

    def sleep_forever
        while true do sleep 1000 end
    end
end