class Puppet::Parser::Compiler::CatalogValidator::RelationshipValidator

Validator that asserts relationship metaparameters refer to valid resources

Public Instance Methods

validate() click to toggle source
   # File lib/puppet/parser/compiler/catalog_validator/relationship_validator.rb
 4 def validate
 5   catalog.resources.each do |resource|
 6     next unless resource.is_a?(Puppet::Parser::Resource)
 7     next if resource.virtual?
 8     resource.eachparam do |param|
 9       pclass = Puppet::Type.metaparamclass(param.name)
10       validate_relationship(param) if !pclass.nil? && pclass < Puppet::Type::RelationshipMetaparam
11     end
12   end
13   nil
14 end

Private Instance Methods

validate_relationship(param) click to toggle source
   # File lib/puppet/parser/compiler/catalog_validator/relationship_validator.rb
18 def validate_relationship(param)
19   # the referenced resource must exist
20   refs = param.value.is_a?(Array) ? param.value.flatten : [param.value]
21   refs.each do |r|
22     next if r.nil? || r == :undef
23     res = r.to_s
24     begin
25       found = catalog.resource(res)
26     rescue ArgumentError => e
27       # Raise again but with file and line information
28       raise CatalogValidationError.new(e.message, param.file, param.line)
29     end
30     unless found
31       msg = _("Could not find resource '%{res}' in parameter '%{param}'") % { res: res, param: param.name.to_s }
32       raise CatalogValidationError.new(msg, param.file, param.line)
33     end
34   end
35 end