class Puppet::Application::Master

Public Instance Methods

app_defaults() click to toggle source

Sets up the ‘node_cache_terminus’ default to use the Write Only Yaml terminus :write_only_yaml. If this is not wanted, the setting ´node_cache_terminus´ should be set to nil. @see Puppet::Node::WriteOnlyYaml @see setup_node_cache @see puppet issue 16753

Calls superclass method Puppet::Application#app_defaults
# File lib/puppet/application/master.rb, line 134
def app_defaults
  super.merge({
    :node_cache_terminus => :write_only_yaml,
    :facts_terminus => 'yaml'
  })
end
compile() click to toggle source
# File lib/puppet/application/master.rb, line 161
def compile
  Puppet::Util::Log.newdestination :console
  begin
    unless catalog = Puppet::Resource::Catalog.indirection.find(options[:node])
      raise "Could not compile catalog for #{options[:node]}"
    end

    jj catalog.to_resource
  rescue => detail
    $stderr.puts detail
    exit(30)
  end
  exit(0)
end
help() click to toggle source
# File lib/puppet/application/master.rb, line 31
  def help
    <<-'HELP'

puppet-master(8) -- The puppet master daemon
========

SYNOPSIS
--------
The central puppet server. Functions as a certificate authority by
default.


USAGE
-----
puppet master [-D|--daemonize|--no-daemonize] [-d|--debug] [-h|--help]
  [-l|--logdest <file>|console|syslog] [-v|--verbose] [-V|--version]
  [--compile <node-name>]


DESCRIPTION
-----------
This command starts an instance of puppet master, running as a daemon
and using Ruby's built-in Webrick webserver. Puppet master can also be
managed by other application servers; when this is the case, this
executable is not used.


OPTIONS
-------
Note that any configuration parameter that's valid in the configuration
file is also a valid long argument. For example, 'ssldir' is a valid
configuration parameter, so you can specify '--ssldir <directory>' 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 master
with '--genconfig'.

* --daemonize:
  Send the process into the background. This is the default.

* --no-daemonize:
  Do not send the process into the background.

* --debug:
  Enable full debugging.

* --help:
  Print this help message.

* --logdest:
  Where to send messages. Choose between syslog, the console, and a log
  file. Defaults to sending messages to syslog, or the console if
  debugging or verbosity is enabled.

* --verbose:
  Enable verbosity.

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

* --compile:
  Compile a catalogue and output it in JSON from the puppet master. Uses
  facts contained in the $vardir/yaml/ directory to compile the catalog.


EXAMPLE
-------
  puppet master

DIAGNOSTICS
-----------

When running as a standalone daemon, puppet master accepts the
following signals:

* SIGHUP:
  Restart the puppet master server.
* SIGINT and SIGTERM:
  Shut down the puppet master server.
* SIGUSR2:
  Close file descriptors for log files and reopen them. Used with logrotate.

AUTHOR
------
Luke Kanies


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

    HELP
  end
main() click to toggle source
# File lib/puppet/application/master.rb, line 176
def main
  require 'etc'

  # Make sure we've got a localhost ssl cert
  Puppet::SSL::Host.localhost

  # And now configure our server to *only* hit the CA for data, because that's
  # all it will have write access to.
  Puppet::SSL::Host.ca_location = :only if Puppet::SSL::CertificateAuthority.ca?

  if Puppet.features.root?
    begin
      Puppet::Util.chuser
    rescue => detail
      Puppet.log_exception(detail, "Could not change user to #{Puppet[:user]}: #{detail}")
      exit(39)
    end
  end

  unless options[:rack]
    require 'puppet/network/server'
    @daemon.server = Puppet::Network::Server.new(Puppet[:bindaddress], Puppet[:masterport])
    @daemon.daemonize if Puppet[:daemonize]
  else
    require 'puppet/network/http/rack'
    @app = Puppet::Network::HTTP::Rack.new()
  end

  Puppet.notice "Starting Puppet master version #{Puppet.version}"

  unless options[:rack]
    @daemon.start
  else
    return @app
  end
end
preinit() click to toggle source
# File lib/puppet/application/master.rb, line 141
def preinit
  Signal.trap(:INT) do
    $stderr.puts "Canceling startup"
    exit(0)
  end

  # Create this first-off, so we have ARGV
  require 'puppet/daemon'
  @daemon = Puppet::Daemon.new
  @daemon.argv = ARGV.dup
end
run_command() click to toggle source
# File lib/puppet/application/master.rb, line 153
def run_command
  if options[:node]
    compile
  else
    main
  end
end
setup() click to toggle source
# File lib/puppet/application/master.rb, line 262
def setup
  raise Puppet::Error.new("Puppet master is not supported on Microsoft Windows") if Puppet.features.microsoft_windows?

  setup_logs

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

  Puppet.settings.use :main, :master, :ssl, :metrics

  setup_terminuses

  setup_node_cache

  setup_ssl
end
setup_logs() click to toggle source
# File lib/puppet/application/master.rb, line 213
def setup_logs
  # Handle the logging settings.
  if options[:debug] or options[:verbose]
    if options[:debug]
      Puppet::Util::Log.level = :debug
    else
      Puppet::Util::Log.level = :info
    end

    unless Puppet[:daemonize] or options[:rack]
      Puppet::Util::Log.newdestination(:console)
      options[:setdest] = true
    end
  end

  Puppet::Util::Log.newdestination(:syslog) unless options[:setdest]
end
setup_node_cache() click to toggle source

Sets up a special node cache “write only yaml” that collects and stores node data in yaml but never finds or reads anything (this since a real cache causes stale data to be served in circumstances when the cache can not be cleared). @see puppet issue 16753 @see Puppet::Node::WriteOnlyYaml @return [void]

# File lib/puppet/application/master.rb, line 258
def setup_node_cache
  Puppet::Node.indirection.cache_class = Puppet[:node_cache_terminus]
end
setup_ssl() click to toggle source
# File lib/puppet/application/master.rb, line 241
def setup_ssl
  # Configure all of the SSL stuff.
  if Puppet::SSL::CertificateAuthority.ca?
    Puppet::SSL::Host.ca_location = :local
    Puppet.settings.use :ca
    Puppet::SSL::CertificateAuthority.instance
  else
    Puppet::SSL::Host.ca_location = :none
  end
end
setup_terminuses() click to toggle source
# File lib/puppet/application/master.rb, line 231
def setup_terminuses
  require 'puppet/file_serving/content'
  require 'puppet/file_serving/metadata'

  Puppet::FileServing::Content.indirection.terminus_class = :file_server
  Puppet::FileServing::Metadata.indirection.terminus_class = :file_server

  Puppet::FileBucket::File.indirection.terminus_class = :file
end