class Puppet::Application::Queue

Attributes

daemon[RW]

Public Instance Methods

app_defaults() click to toggle source
Calls superclass method Puppet::Application#app_defaults
# File lib/puppet/application/queue.rb, line 8
def app_defaults()
  super.merge( :pidfile => "$rundir/queue.pid" )
end
help() click to toggle source
# File lib/puppet/application/queue.rb, line 42
  def help
    <<-HELP

puppet-queue(8) -- Queuing daemon for asynchronous storeconfigs
========

SYNOPSIS
--------
Retrieves serialized storeconfigs records from a queue and processes
them in order.


USAGE
-----
puppet queue [-d|--debug] [-v|--verbose]


DESCRIPTION
-----------
This application runs as a daemon and processes storeconfigs data,
retrieving the data from a stomp server message queue and writing it to
a database.

For more information, including instructions for properly setting up
your puppet master and message queue, see the documentation on setting
up asynchronous storeconfigs at:
http://projects.puppetlabs.com/projects/1/wiki/Using_Stored_Configuration


OPTIONS
-------
Note that any configuration parameter that's valid in the configuration
file is also a valid long argument. For example, 'server' is a valid
configuration parameter, so you can specify '--server <servername>' as
an argument.

See the configuration file documentation at
http://docs.puppetlabs.com/references/stable/configuration.html for the
full list of acceptable parameters. A commented list of all
configuration options can also be generated by running puppet queue with
'--genconfig'.

* --debug:
  Enable full debugging.

* --help:
  Print this help message

* --verbose:
  Turn on verbose reporting.

* --version:
  Print the puppet version number and exit.


EXAMPLE
-------
    $ puppet queue


AUTHOR
------
Luke Kanies


COPYRIGHT
---------
Copyright (c) 2011 Puppet Labs, LLC Licensed under the Apache 2.0 License

    HELP
  end
main() click to toggle source
# File lib/puppet/application/queue.rb, line 123
def main
  require 'puppet/indirector/catalog/queue' # provides Puppet::Indirector::Queue.subscribe
  Puppet.notice "Starting puppet queue #{Puppet.version}"
  Puppet::Resource::Catalog::Queue.subscribe do |catalog|
    # Once you have a Puppet::Resource::Catalog instance, passing it to save 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::Util.benchmark(:notice, "Processing queued catalog for #{catalog.name}") do
      begin
        Puppet::Resource::Catalog.indirection.save(catalog)
      rescue => detail
        Puppet.log_exception(detail, "Could not save queued catalog for #{catalog.name}: #{detail}")
      end
    end
  end

  Thread.list.each { |thread| thread.join }
end
preinit() click to toggle source
# File lib/puppet/application/queue.rb, line 12
def preinit
  require 'puppet/daemon'
  @daemon = Puppet::Daemon.new
  @daemon.argv = ARGV.dup

  # Do an initial trap, so that cancels don't get a stack trace.

  # This exits with exit code 1
  Signal.trap(:INT) do
    $stderr.puts "Caught SIGINT; shutting down"
    exit(1)
  end

  # This is a normal shutdown, so code 0
  Signal.trap(:TERM) do
    $stderr.puts "Caught SIGTERM; shutting down"
    exit(0)
  end

  {
    :verbose => false,
    :debug => false
  }.each do |opt,val|
    options[opt] = val
  end
end
setup() click to toggle source
# File lib/puppet/application/queue.rb, line 142
def setup
  Puppet.warning "Puppet queue is deprecated. See http://links.puppetlabs.com/puppet-queue-deprecation"

  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

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

  require 'puppet/resource/catalog'
  Puppet::Resource::Catalog.indirection.terminus_class = :store_configs

  daemon.daemonize if Puppet[:daemonize]

  # We want to make sure that we don't have a cache
  # class set up, because if storeconfigs is enabled,
  # we'll get a loop of continually caching the catalog
  # for storage again.
  Puppet::Resource::Catalog.indirection.cache_class = nil
end