# File lib/puppet/type.rb, line 1530
1530:     def self.provide(name, options = {}, &block)
1531:         name = Puppet::Util.symbolize(name)
1532: 
1533:         if obj = provider_hash[name]
1534:             Puppet.debug "Reloading %s %s provider" % [name, self.name]
1535:             unprovide(name)
1536:         end
1537: 
1538:         parent = if pname = options[:parent]
1539:             options.delete(:parent)
1540:             if pname.is_a? Class
1541:                 pname
1542:             else
1543:                 if provider = self.provider(pname)
1544:                     provider
1545:                 else
1546:                     raise Puppet::DevError,
1547:                         "Could not find parent provider %s of %s" %
1548:                             [pname, name]
1549:                 end
1550:             end
1551:         else
1552:             Puppet::Provider
1553:         end
1554: 
1555:         options[:resource_type] ||= self
1556: 
1557:         self.providify
1558: 
1559:         provider = genclass(name,
1560:             :parent => parent,
1561:             :hash => provider_hash,
1562:             :prefix => "Provider",
1563:             :block => block,
1564:             :include => feature_module,
1565:             :extend => feature_module,
1566:             :attributes => options
1567:         )
1568: 
1569:         return provider
1570:     end