diff options
author | Daniel Pittman <daniel@puppetlabs.com> | 2011-05-02 15:14:25 -0700 |
---|---|---|
committer | Daniel Pittman <daniel@puppetlabs.com> | 2011-05-02 15:34:22 -0700 |
commit | 1b42725b5caab6f8e457e11fec2488fbe94e8e43 (patch) | |
tree | 4feb8e200b2c4fb69e18cb6a19d3d58432583038 /lib | |
parent | 86c6ec24f387fc70abc333fc4ac974b06b3ec80a (diff) | |
download | puppet-1b42725b5caab6f8e457e11fec2488fbe94e8e43.tar.gz puppet-1b42725b5caab6f8e457e11fec2488fbe94e8e43.tar.xz puppet-1b42725b5caab6f8e457e11fec2488fbe94e8e43.zip |
(#7314) Faces fail horribly when one has a syntax error.
When we hit a syntax error in any face, a whole bunch of unrelated face things
would blow up in horrible ways. Stack traces for all...
Now, instead, we catch that fault but specifically only in the face file
and report it through our error logs, then quietly ignore the face.
Reviewed-By: Nick Lewis <nick@puppetlabs.com>
Diffstat (limited to 'lib')
-rw-r--r-- | lib/puppet/interface/face_collection.rb | 21 |
1 files changed, 8 insertions, 13 deletions
diff --git a/lib/puppet/interface/face_collection.rb b/lib/puppet/interface/face_collection.rb index 6e6afc545..baa424692 100644 --- a/lib/puppet/interface/face_collection.rb +++ b/lib/puppet/interface/face_collection.rb @@ -10,21 +10,12 @@ module Puppet::Interface::FaceCollection unless @loaded @loaded = true $LOAD_PATH.each do |dir| - next unless FileTest.directory?(dir) - Dir.chdir(dir) do - Dir.glob("puppet/face/*.rb").collect { |f| f.sub(/\.rb/, '') }.each do |file| - iname = file.sub(/\.rb/, '') - begin - require iname - rescue Exception => detail - puts detail.backtrace if Puppet[:trace] - raise "Could not load #{iname} from #{dir}/#{file}: #{detail}" - end - end - end + Dir.glob("#{dir}/puppet/face/*.rb"). + collect {|f| File.basename(f, '.rb') }. + each {|name| self[name, :current] } end end - return @faces.keys.select {|name| @faces[name].length > 0 } + @faces.keys.select {|name| @faces[name].length > 0 } end def self.validate_version(version) @@ -124,6 +115,10 @@ module Puppet::Interface::FaceCollection rescue LoadError => e raise unless e.message =~ %r{-- puppet/face/#{name}$} # ...guess we didn't find the file; return a much better problem. + rescue SyntaxError => e + raise unless e.message =~ %r{puppet/face/#{name}\.rb:\d+: } + Puppet.err "Failed to load face #{name}:\n#{e}" + # ...but we just carry on after complaining. end return get_face(name, version) |