summaryrefslogtreecommitdiffstats
path: root/lib/puppet/indirector
diff options
context:
space:
mode:
authorLuke Kanies <luke@puppetlabs.com>2011-03-25 14:15:12 -0700
committerLuke Kanies <luke@puppetlabs.com>2011-03-25 14:32:18 -0700
commite16a38349c596c4a6ea682173e0cc704dedc98a7 (patch)
tree7222ea83fc10d9bec621e881b5815503d7150ed5 /lib/puppet/indirector
parent29268f3fda3c6e29f60d05e5aa387ff0424e7b1e (diff)
downloadpuppet-e16a38349c596c4a6ea682173e0cc704dedc98a7.tar.gz
puppet-e16a38349c596c4a6ea682173e0cc704dedc98a7.tar.xz
puppet-e16a38349c596c4a6ea682173e0cc704dedc98a7.zip
Fixing #6851 - ResourceType#find/search loads types
Previously we could only find types from site.pp, but we now automatically load the specified type (for find) or all types. This also adds a TypeLoader#import_all capable of importing all manifests (ruby or puppet) on a given system. Signed-off-by: Luke Kanies <luke@puppetlabs.com> Reviewed-by: Daniel Pittman <daniel@puppetlabs.com>
Diffstat (limited to 'lib/puppet/indirector')
-rw-r--r--lib/puppet/indirector/resource_type/parser.rb16
1 files changed, 7 insertions, 9 deletions
diff --git a/lib/puppet/indirector/resource_type/parser.rb b/lib/puppet/indirector/resource_type/parser.rb
index 24b4b065e..fd5b3938a 100644
--- a/lib/puppet/indirector/resource_type/parser.rb
+++ b/lib/puppet/indirector/resource_type/parser.rb
@@ -10,7 +10,10 @@ class Puppet::Indirector::ResourceType::Parser < Puppet::Indirector::Code
# This is a bit ugly.
[:hostclass, :definition, :node].each do |type|
- if r = krt.send(type, request.key)
+ # We have to us 'find_<type>' here because it will
+ # load any missing types from disk, whereas the plain
+ # '<type>' method only returns from memory.
+ if r = krt.send("find_#{type}", [""], request.key)
return r
end
end
@@ -18,16 +21,11 @@ class Puppet::Indirector::ResourceType::Parser < Puppet::Indirector::Code
end
def search(request)
-=begin
- @modulepath = set_modulepath(options[:modulepath])
- get_code(@modulepath)[:manifests].collect do |file|
- Puppet[:manifest]=file
- get_resources_of_type(:hostclass)
- end.flatten
-=end
raise ArgumentError, "Only '*' is acceptable as a search request" unless request.key == "*"
krt = request.environment.known_resource_types
- result = [krt.hostclasses.values, krt.definitions.values, krt.nodes.values].flatten
+ # Make sure we've got all of the types loaded.
+ krt.loader.import_all
+ result = [krt.hostclasses.values, krt.definitions.values, krt.nodes.values].flatten.reject { |t| t.name == "" }
return nil if result.empty?
result
end