summaryrefslogtreecommitdiffstats
path: root/lib/puppet/application/interface.rb
diff options
context:
space:
mode:
authorLuke Kanies <luke@puppetlabs.com>2011-02-08 16:26:10 -0800
committerLuke Kanies <luke@puppetlabs.com>2011-02-08 16:26:10 -0800
commit264a43c835a8131f3a2df5b5cf5c29c8bfcabb67 (patch)
tree24f3234eb95b5498445f6c9c767f53099b043f4d /lib/puppet/application/interface.rb
parentefca35cbea836fac954fb655d76493f03b36e96f (diff)
downloadpuppet-264a43c835a8131f3a2df5b5cf5c29c8bfcabb67.tar.gz
puppet-264a43c835a8131f3a2df5b5cf5c29c8bfcabb67.tar.xz
puppet-264a43c835a8131f3a2df5b5cf5c29c8bfcabb67.zip
Renaming "data" app to "interface"
Signed-off-by: Luke Kanies <luke@puppetlabs.com>
Diffstat (limited to 'lib/puppet/application/interface.rb')
-rw-r--r--lib/puppet/application/interface.rb93
1 files changed, 93 insertions, 0 deletions
diff --git a/lib/puppet/application/interface.rb b/lib/puppet/application/interface.rb
new file mode 100644
index 000000000..8d98d4416
--- /dev/null
+++ b/lib/puppet/application/interface.rb
@@ -0,0 +1,93 @@
+require 'puppet/application'
+
+class Puppet::Application::Data < Puppet::Application
+
+ should_parse_config
+ run_mode :agent
+
+ option("--debug", "-d") do |arg|
+ Puppet::Util::Log.level = :debug
+ end
+
+ option("--verbose", "-v") do
+ Puppet::Util::Log.level = :info
+ end
+
+ def list(*arguments)
+ if arguments.empty?
+ arguments = %w{terminuses actions}
+ end
+ indirections.each do |ind|
+ str = "#{ind}:\n"
+ if arguments.include?("terminuses")
+ begin
+ terms = terminus_classes(ind.to_sym)
+ str << "\tTerminuses: #{terms.join(", ")}\n"
+ rescue => detail
+ $stderr.puts "Could not load terminuses for #{ind}: #{detail}"
+ end
+ end
+
+ if arguments.include?("actions")
+ begin
+ actions = actions(ind.to_sym)
+ str << "\tActions: #{actions.join(", ")}\n"
+ rescue => detail
+ $stderr.puts "Could not load actions for #{ind}: #{detail}"
+ end
+ end
+
+ print str
+ end
+ exit(0)
+ end
+
+ attr_accessor :verb, :name, :arguments
+
+ def main
+ # Call the method associated with the provided action (e.g., 'find').
+ send(verb, *arguments)
+ end
+
+ def setup
+ Puppet::Util::Log.newdestination :console
+
+ load_applications # Call this to load all of the apps
+
+ @verb, @arguments = command_line.args
+ @arguments ||= []
+
+ validate
+ end
+
+ def validate
+ unless verb
+ raise "You must specify 'find', 'search', 'save', or 'destroy' as a verb; 'save' probably does not work right now"
+ end
+
+ unless respond_to?(verb)
+ raise "Command '#{verb}' not found for 'data'"
+ end
+ end
+
+ def indirections
+ Puppet::Indirector::Indirection.instances.collect { |t| t.to_s }.sort
+ end
+
+ def terminus_classes(indirection)
+ Puppet::Indirector::Terminus.terminus_classes(indirection).collect { |t| t.to_s }.sort
+ end
+
+ def actions(indirection)
+ return [] unless interface = Puppet::Interface.interface(indirection)
+ interface.load_actions
+ return interface.actions.sort { |a,b| a.to_s <=> b.to_s }
+ end
+
+ def load_applications
+ command_line.available_subcommands.each do |app|
+ command_line.require_application app
+ end
+ end
+end
+