# File lib/puppet/type.rb, line 499
499:     def newattr(name, options = {})
500:         if name.is_a?(Class)
501:             klass = name
502:             name = klass.name
503:         end
504: 
505:         unless klass = self.class.attrclass(name)
506:             raise Puppet::Error, "Resource type %s does not support parameter %s" % [self.class.name, name]
507:         end
508: 
509:         if @parameters.include?(name)
510:             raise Puppet::Error, "Parameter '%s' is already defined in %s" %
511:                 [name, self.ref]
512:         end
513: 
514:         if provider and ! provider.class.supports_parameter?(klass)
515:             missing = klass.required_features.find_all { |f| ! provider.class.feature?(f) }
516:             info "Provider %s does not support features %s; not managing attribute %s" % [provider.class.name, missing.join(", "), name]
517:             return nil
518:         end
519: 
520:         # Add resource information at creation time, so it's available
521:         # during validation.
522:         options[:resource] = self
523:         begin
524:             # make sure the parameter doesn't have any errors
525:             return @parameters[name] = klass.new(options)
526:         rescue => detail
527:             error = Puppet::Error.new("Parameter %s failed: %s" %
528:                 [name, detail])
529:             error.set_backtrace(detail.backtrace)
530:             raise error
531:         end
532:     end