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