diff --git a/bin/puppetqd b/bin/puppetqd old mode 100644 new mode 100755 diff --git a/lib/puppet/application/puppetqd.rb b/lib/puppet/application/puppetqd.rb index 995668bec..e65ce75dc 100644 --- a/lib/puppet/application/puppetqd.rb +++ b/lib/puppet/application/puppetqd.rb @@ -1,107 +1,123 @@ require 'puppet' +require 'puppet/daemon' require 'puppet/application' require 'puppet/node/catalog' require 'puppet/indirector/catalog/queue' # BACKPORT - this method should be removed when merged into master. class Puppet::Util::Settings # Generate the list of valid arguments, in a format that OptionParser can # understand, and add them to the passed option list. def optparse_addargs(options) # Add all of the config parameters as valid options. self.each { |name, element| options << element.optparse_args } return options end end # BACKPORT - this method should be removed when merged into master. class Puppet::Util::Settings::CElement # get the arguments in OptionParser format def optparse_args if short ["--#{name}", "-#{short}", desc, :REQUIRED] else ["--#{name}", desc, :REQUIRED] end end end +class Puppet::Util::Settings::CBoolean + def optparse_args + if short + ["--[no-]#{name}", "-#{short}", desc, :NONE ] + else + ["--[no-]#{name}", desc, :NONE] + end + end +end + Puppet::Application.new(:puppetqd) do + extend Puppet::Daemon should_parse_config preinit do # 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 @args = {} end option("--debug","-d") option("--verbose","-v") command(:main) do Puppet::Node::Catalog::Queue.subscribe do |catalog| # Once you have a Puppet::Node::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 + daemonize if Puppet[:daemonize] + + while true do sleep 1000 end end # This is the main application entry point. # BACKPORT - this method should be removed when merged into master. # This method had to be added because Puppet.settings.parse takes no # arguments in master but requires an argument in 0.24.x. def run run_preinit parse_options - Puppet.settings.parse(Puppet[:config]) if should_parse_config? + Puppet.settings.parse(Puppet[:config]) if should_parse_config? and File.exist?(Puppet[:config]) run_setup run_command 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 unless options[:setdest] Puppet::Util::Log.newdestination(:syslog) end end setup do unless Puppet.features.stomp? raise ArgumentError, "Could not load 'stomp', which must be present for queueing to work" end setup_logs if Puppet.settings.print_configs? exit(Puppet.settings.print_configs ? 0 : 1) end Puppet::Node::Catalog.terminus_class = :active_record end end