467: def newattr(name)
468: if name.is_a?(Class)
469: klass = name
470: name = klass.name
471: end
472:
473: unless klass = self.class.attrclass(name)
474: raise Puppet::Error, "Resource type #{self.class.name} does not support parameter #{name}"
475: end
476:
477: if provider and ! provider.class.supports_parameter?(klass)
478: missing = klass.required_features.find_all { |f| ! provider.class.feature?(f) }
479: info "Provider %s does not support features %s; not managing attribute %s" % [provider.class.name, missing.join(", "), name]
480: return nil
481: end
482:
483: return @parameters[name] if @parameters.include?(name)
484:
485: @parameters[name] = klass.new(:resource => self)
486: end