summaryrefslogtreecommitdiffstats
path: root/lib/puppet
diff options
context:
space:
mode:
Diffstat (limited to 'lib/puppet')
-rw-r--r--lib/puppet/application/configurer.rb23
-rw-r--r--lib/puppet/interface.rb2
-rw-r--r--lib/puppet/interface/catalog.rb32
-rw-r--r--lib/puppet/interface/configurer.rb13
-rw-r--r--lib/puppet/interface/report.rb9
5 files changed, 79 insertions, 0 deletions
diff --git a/lib/puppet/application/configurer.rb b/lib/puppet/application/configurer.rb
new file mode 100644
index 000000000..70d24814e
--- /dev/null
+++ b/lib/puppet/application/configurer.rb
@@ -0,0 +1,23 @@
+require 'puppet/application'
+require 'puppet/interface'
+
+class Puppet::Application::Configurer < Puppet::Application
+ should_parse_config
+ run_mode :agent
+
+ option("--debug","-d")
+ option("--verbose","-v")
+
+ def setup
+ if options[:debug] or options[:verbose]
+ Puppet::Util::Log.level = options[:debug] ? :debug : :info
+ end
+
+ Puppet::Util::Log.newdestination(:console)
+ end
+
+ def run_command
+ report = Puppet::Interface::Configurer.synchronize(Puppet[:certname])
+ Puppet::Interface::Report.submit(report)
+ end
+end
diff --git a/lib/puppet/interface.rb b/lib/puppet/interface.rb
index d169067ea..13b1a811b 100644
--- a/lib/puppet/interface.rb
+++ b/lib/puppet/interface.rb
@@ -7,6 +7,8 @@ class Puppet::Interface
include Puppet::Interface::ActionManager
extend Puppet::Interface::ActionManager
+ include Puppet::Util
+
# This is just so we can search for actions. We only use its
# list of directories to search.
# Can't we utilize an external autoloader, or simply use the $LOAD_PATH? -pvb
diff --git a/lib/puppet/interface/catalog.rb b/lib/puppet/interface/catalog.rb
index b2ed08f92..f99d0881a 100644
--- a/lib/puppet/interface/catalog.rb
+++ b/lib/puppet/interface/catalog.rb
@@ -1,4 +1,36 @@
require 'puppet/interface/indirector'
Puppet::Interface::Indirector.new(:catalog) do
+ action(:apply) do |catalog|
+ report = Puppet::Transaction::Report.new("apply")
+ report.configuration_version = catalog.version
+
+ Puppet::Util::Log.newdestination(report)
+
+ begin
+ benchmark(:notice, "Finished catalog run") do
+ catalog.apply(:report => report)
+ end
+ rescue => detail
+ puts detail.backtrace if Puppet[:trace]
+ Puppet.err "Failed to apply catalog: #{detail}"
+ end
+
+ report.finalize_report
+ report
+ end
+
+ action(:download) do |certname,facts|
+ Puppet::Resource::Catalog.terminus_class = :rest
+ facts_to_upload = {:facts_format => :b64_zlib_yaml, :facts => CGI.escape(facts.render(:b64_zlib_yaml))}
+ catalog = nil
+ retrieval_duration = thinmark do
+ catalog = Puppet::Interface::Catalog.find(certname, facts_to_upload)
+ end
+ catalog = catalog.to_ral
+ catalog.finalize
+ catalog.retrieval_duration = retrieval_duration
+ catalog.write_class_file
+ catalog
+ end
end
diff --git a/lib/puppet/interface/configurer.rb b/lib/puppet/interface/configurer.rb
new file mode 100644
index 000000000..42e950fa3
--- /dev/null
+++ b/lib/puppet/interface/configurer.rb
@@ -0,0 +1,13 @@
+require 'puppet/interface'
+
+Puppet::Interface.new(:configurer) do
+ action(:synchronize) do |certname|
+ facts = Puppet::Interface::Facts.find(certname)
+
+ catalog = Puppet::Interface::Catalog.download(certname, facts)
+
+ report = Puppet::Interface::Catalog.apply(catalog)
+
+ report
+ end
+end
diff --git a/lib/puppet/interface/report.rb b/lib/puppet/interface/report.rb
index e7b916527..4923a4b67 100644
--- a/lib/puppet/interface/report.rb
+++ b/lib/puppet/interface/report.rb
@@ -1,4 +1,13 @@
require 'puppet/interface/indirector'
Puppet::Interface::Indirector.new(:report) do
+ action(:submit) do |report|
+ begin
+ Puppet::Transaction::Report.terminus_class = :rest
+ report.save
+ rescue => detail
+ puts detail.backtrace if Puppet[:trace]
+ Puppet.err "Could not send report: #{detail}"
+ end
+ end
end