#!/usr/bin/ruby # # = Synopsis # # Run a stand-alone +puppet+ script. # # = Usage # # puppet [-h|--help] [-V|--version] [-d|--debug] [-v|--verbose] # [-l|--logfile ] [-p|--parse-only] # # = Description # # This is the standalone puppet execution script; use it to execute # individual scripts that you write. If you need to execute site-wide # scripts, use +puppetd+ and +puppetmasterd+. # # = Options # # confdir:: # The configuration root directory, where +puppetmasterd+ defaults to looking # for all of its configuration files. Defaults to +/etc/puppet+. # # debug:: # Enable full debugging. # # help:: # Print this help message # # logfile:: # Where to send messages. Choose between syslog, the console, and a log file. # Defaults to sending messages to the console. # # parse-only:: # Just verify syntax, do not apply anything. # # verbose:: # Print extra information. # # = Example # # puppet -l /tmp/script.log script.pp # # = Author # # Luke Kanies # # = Copyright # # Copyright (c) 2005 Reductive Labs, LLC # Licensed under the GNU Public License require 'puppet' require 'puppet/server' require 'puppet/client' require 'getoptlong' $haveusage = true begin require 'rdoc/usage' rescue LoadError $haveusage = false end result = GetoptLong.new( [ "--confdir", "-c", GetoptLong::REQUIRED_ARGUMENT ], [ "--debug", "-d", GetoptLong::NO_ARGUMENT ], [ "--help", "-h", GetoptLong::NO_ARGUMENT ], [ "--logdest", "-l", GetoptLong::REQUIRED_ARGUMENT ], [ "--verbose", "-v", GetoptLong::NO_ARGUMENT ], [ "--noop", "-n", GetoptLong::NO_ARGUMENT ], [ "--use-nodes", GetoptLong::NO_ARGUMENT ], [ "--parse-only", "-p", GetoptLong::NO_ARGUMENT ], [ "--version", "-V", GetoptLong::NO_ARGUMENT ] ) debug = false verbose = false noop = false logfile = false parseonly = false master = { :Local => true } begin result.each { |opt,arg| case opt when "--confdir" Puppet[:puppetconf] = arg when "--version" puts "%s" % Puppet.version exit when "--help" if $haveusage RDoc::usage && exit else puts "No help available unless you have RDoc::usage installed" exit end when "--noop" Puppet[:noop] = true when "--use-nodes" master[:UseNodes] = true when "--verbose" verbose = true when "--parse-only" parseonly = true when "--debug" debug = true when "--logdest" # FIXME we should be able to have log.rb check the validity of the dst case arg when "syslog", "console", /^\//: Puppet[:logdest] = arg else $stderr.puts "Invalid log destination %s" % arg end end } rescue GetoptLong::InvalidOption => detail $stderr.puts "Try '#{$0} --help'" #if $haveusage # RDoc::usage(1,'usage') #end exit(1) end if debug Puppet[:loglevel] = :debug elsif verbose Puppet[:loglevel] = :info end master[:File] = ARGV.shift begin server = Puppet::Server::Master.new(master) rescue => detail $stderr.puts detail exit(1) end begin client = Puppet::Client::MasterClient.new( :Master => server, :Cache => false ) rescue => detail $stderr.puts detail exit(1) end if parseonly exit(0) end begin client.getconfig client.apply rescue => detail Puppet.err detail exit(1) end