summaryrefslogtreecommitdiffstats
path: root/lib/puppet/application
diff options
context:
space:
mode:
authorBrice Figureau <brice-puppet@daysofwonder.com>2009-02-14 17:15:08 +0100
committerBrice Figureau <brice-puppet@daysofwonder.com>2009-02-16 20:12:10 +0100
commitaf219bf45fe58287f1b46bcfd98dfbe548958b33 (patch)
treeee7d809d7b09bd260dc8f9dcb49479240b0ed35c /lib/puppet/application
parentd51398c3eb3c09a9912fff8b4b7656a9ddb6b873 (diff)
downloadpuppet-af219bf45fe58287f1b46bcfd98dfbe548958b33.tar.gz
puppet-af219bf45fe58287f1b46bcfd98dfbe548958b33.tar.xz
puppet-af219bf45fe58287f1b46bcfd98dfbe548958b33.zip
Move puppet to the Application Controller paradigm
Signed-off-by: Brice Figureau <brice-puppet@daysofwonder.com>
Diffstat (limited to 'lib/puppet/application')
-rw-r--r--lib/puppet/application/puppet.rb145
1 files changed, 145 insertions, 0 deletions
diff --git a/lib/puppet/application/puppet.rb b/lib/puppet/application/puppet.rb
new file mode 100644
index 000000000..c8ca81975
--- /dev/null
+++ b/lib/puppet/application/puppet.rb
@@ -0,0 +1,145 @@
+require 'puppet'
+require 'puppet/application'
+require 'puppet/network/handler'
+require 'puppet/network/client'
+
+Puppet::Application.new(:puppet) do
+
+ should_parse_config
+
+ option("--debug","-d")
+ option("--execute EXECUTE","-e")
+ option("--loadclasses","-L")
+ option("--verbose","-v")
+ option("--use-nodes")
+ option("--detailed-exitcodes")
+
+ option("--logdest LOGDEST", "-l") do |arg|
+ begin
+ Puppet::Util::Log.newdestination(arg)
+ options[:logset] = true
+ rescue => detail
+ $stderr.puts detail.to_s
+ end
+ end
+
+ option("--version", "-V") do |arg|
+ puts "%s" % Puppet.version
+ exit
+ end
+
+ dispatch do
+ return Puppet[:parseonly] ? :parseonly : :main
+ end
+
+ command(:parseonly) do
+ begin
+ Puppet::Parser::Interpreter.new.parser(Puppet[:environment])
+ rescue => detail
+ Puppet.err detail
+ exit 1
+ end
+ exit 0
+ end
+
+ command(:main) do
+ # Collect our facts.
+ facts = Puppet::Node::Facts.find(Puppet[:certname])
+
+ # Find our Node
+ unless node = Puppet::Node.find(Puppet[:certname])
+ raise "Could not find node %s" % Puppet[:certname]
+ end
+
+ # Merge in the facts.
+ node.merge(facts.values)
+
+ # Allow users to load the classes that puppetd creates.
+ if options[:loadclasses]
+ file = Puppet[:classfile]
+ if FileTest.exists?(file)
+ unless FileTest.readable?(file)
+ $stderr.puts "%s is not readable" % file
+ exit(63)
+ end
+ node.classes = File.read(file).split(/[\s\n]+/)
+ end
+ end
+
+ begin
+ # Compile our catalog
+ starttime = Time.now
+ catalog = Puppet::Resource::Catalog.find(node.name, :use_node => node)
+
+ # Translate it to a RAL catalog
+ catalog = catalog.to_ral
+
+ catalog.host_config = true if Puppet[:graph] or Puppet[:report]
+
+ catalog.finalize
+
+ catalog.retrieval_duration = Time.now - starttime
+
+ # And apply it
+ transaction = catalog.apply
+
+ status = 0
+ if not Puppet[:noop] and options[:detailed_exits] then
+ transaction.generate_report
+ status |= 2 if transaction.report.metrics["changes"][:total] > 0
+ status |= 4 if transaction.report.metrics["resources"][:failed] > 0
+ end
+ exit(status)
+ rescue => detail
+ if Puppet[:trace]
+ puts detail.backtrace
+ end
+ if detail.is_a?(XMLRPC::FaultException)
+ $stderr.puts detail.message
+ else
+ $stderr.puts detail
+ end
+ exit(1)
+ end
+ end
+
+ setup do
+ # Now parse the config
+ if Puppet[:config] and File.exists? Puppet[:config]
+ Puppet.settings.parse(Puppet[:config])
+ end
+
+ if Puppet.settings.print_configs?
+ exit(Puppet.settings.print_configs ? 0 : 1)
+ end
+
+ # If noop is set, then also enable diffs
+ if Puppet[:noop]
+ Puppet[:show_diff] = true
+ end
+
+ unless options[:logset]
+ Puppet::Util::Log.newdestination(:console)
+ end
+ client = nil
+ server = nil
+
+ trap(:INT) do
+ $stderr.puts "Exiting"
+ exit(1)
+ end
+
+ if options[:debug]
+ Puppet::Util::Log.level = :debug
+ elsif options[:verbose]
+ Puppet::Util::Log.level = :info
+ end
+
+ # Set our code or file to use.
+ if options[:code] or ARGV.length == 0
+ Puppet[:code] = options[:code] || STDIN.read
+ else
+ Puppet[:manifest] = ARGV.shift
+ end
+ end
+end