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
 5 def validate
 6   catalog.resources.each do |resource|
 7     next unless resource.is_a?(Puppet::Parser::Resource)
 8     next if resource.virtual?
 9     resource.eachparam do |param|
10       pclass = Puppet::Type.metaparamclass(param.name)
11       validate_relationship(param) if !pclass.nil? && pclass < Puppet::Type::RelationshipMetaparam
12     end
13   end
14   nil
15 end

Private Instance Methods

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