summaryrefslogtreecommitdiffstats
path: root/lib/puppet/application/interface.rb
diff options
context:
space:
mode:
authorLuke Kanies <luke@puppetlabs.com>2011-02-20 15:39:54 -0800
committerLuke Kanies <luke@puppetlabs.com>2011-02-20 15:39:54 -0800
commitcde1baa4a9a27ba95ad2a61bc8e46d43e708b081 (patch)
tree737760e127c5c0ccc60181aeaa519acfd89c774d /lib/puppet/application/interface.rb
parenteff4eec9d53d4fb8270799458455fe4bdc47d1df (diff)
downloadpuppet-cde1baa4a9a27ba95ad2a61bc8e46d43e708b081.tar.gz
puppet-cde1baa4a9a27ba95ad2a61bc8e46d43e708b081.tar.xz
puppet-cde1baa4a9a27ba95ad2a61bc8e46d43e708b081.zip
Fixing Interface listing
It got broke when the Indirector base class was extracted. Signed-off-by: Luke Kanies <luke@puppetlabs.com>
Diffstat (limited to 'lib/puppet/application/interface.rb')
-rw-r--r--lib/puppet/application/interface.rb42
1 files changed, 33 insertions, 9 deletions
diff --git a/lib/puppet/application/interface.rb b/lib/puppet/application/interface.rb
index db926df86..8f26658c9 100644
--- a/lib/puppet/application/interface.rb
+++ b/lib/puppet/application/interface.rb
@@ -17,23 +17,23 @@ class Puppet::Application::Interface < Puppet::Application
if arguments.empty?
arguments = %w{terminuses actions}
end
- indirections.each do |ind|
- str = "#{ind}:\n"
+ interfaces.each do |name|
+ str = "#{name}:\n"
if arguments.include?("terminuses")
begin
- terms = terminus_classes(ind.to_sym)
+ terms = terminus_classes(name.to_sym)
str << "\tTerminuses: #{terms.join(", ")}\n"
rescue => detail
- $stderr.puts "Could not load terminuses for #{ind}: #{detail}"
+ $stderr.puts "Could not load terminuses for #{name}: #{detail}"
end
end
if arguments.include?("actions")
begin
- actions = actions(ind.to_sym)
+ actions = actions(name.to_sym)
str << "\tActions: #{actions.join(", ")}\n"
rescue => detail
- $stderr.puts "Could not load actions for #{ind}: #{detail}"
+ $stderr.puts "Could not load actions for #{name}: #{detail}"
end
end
@@ -70,12 +70,36 @@ class Puppet::Application::Interface < Puppet::Application
end
end
- def indirections
- Puppet::Indirector::Indirection.instances.collect { |t| t.to_s }.sort
+ def interfaces
+ # Load all of the interfaces
+ unless @interfaces
+ $LOAD_PATH.each do |dir|
+ next unless FileTest.directory?(dir)
+ Dir.chdir(dir) do
+ Dir.glob("puppet/interface/*.rb").collect { |f| f.sub(/\.rb/, '') }.each do |file|
+ begin
+ require file
+ rescue Error => detail
+ puts detail.backtrace if Puppet[:trace]
+ raise "Could not load #{file}: #{detail}"
+ end
+ end
+ end
+ end
+
+ @interfaces = []
+ Puppet::Interface.constants.each do |name|
+ klass = Puppet::Interface.const_get(name)
+ next if klass.abstract? # skip base classes
+
+ @interfaces << name.downcase
+ end
+ end
+ @interfaces
end
def terminus_classes(indirection)
- Puppet::Indirector::Terminus.terminus_classes(indirection).collect { |t| t.to_s }.sort
+ Puppet::Indirector::Terminus.terminus_classes(indirection).collect { |t| t.to_s }.sort
end
def actions(indirection)