# File lib/puppet/type.rb, line 1416
1416:   def self.provide(name, options = {}, &block)
1417:     name = Puppet::Util.symbolize(name)
1418: 
1419:     if obj = provider_hash[name]
1420:       Puppet.debug "Reloading #{name} #{self.name} provider"
1421:       unprovide(name)
1422:     end
1423: 
1424:     parent = if pname = options[:parent]
1425:       options.delete(:parent)
1426:       if pname.is_a? Class
1427:         pname
1428:       else
1429:         if provider = self.provider(pname)
1430:           provider
1431:         else
1432:           raise Puppet::DevError,
1433:             "Could not find parent provider #{pname} of #{name}"
1434:         end
1435:       end
1436:     else
1437:       Puppet::Provider
1438:     end
1439: 
1440:     options[:resource_type] ||= self
1441: 
1442:     self.providify
1443: 
1444: 
1445:       provider = genclass(
1446:         name,
1447:       :parent => parent,
1448:       :hash => provider_hash,
1449:       :prefix => "Provider",
1450:       :block => block,
1451:       :include => feature_module,
1452:       :extend => feature_module,
1453: 
1454:       :attributes => options
1455:     )
1456: 
1457:     provider
1458:   end