1574: def self.providify
1575: return if @paramhash.has_key? :provider
1576:
1577: newparam(:provider) do
1578: desc "The specific backend for #{self.name.to_s} to use. You will
1579: seldom need to specify this -- Puppet will usually discover the
1580: appropriate provider for your platform."
1581:
1582:
1583:
1584: class << self
1585: attr_accessor :parenttype
1586: end
1587:
1588:
1589: def self.doc
1590: @doc + " Available providers are:\n\n" + parenttype().providers.sort { |a,b|
1591: a.to_s <=> b.to_s
1592: }.collect { |i|
1593: "* **%s**: %s" % [i, parenttype().provider(i).doc]
1594: }.join("\n")
1595: end
1596:
1597: defaultto {
1598: @resource.class.defaultprovider.name
1599: }
1600:
1601: validate do |provider_class|
1602: provider_class = provider_class[0] if provider_class.is_a? Array
1603: if provider_class.is_a?(Puppet::Provider)
1604: provider_class = provider_class.class.name
1605: end
1606:
1607: unless provider = @resource.class.provider(provider_class)
1608: raise ArgumentError, "Invalid %s provider '%s'" % [@resource.class.name, provider_class]
1609: end
1610: end
1611:
1612: munge do |provider|
1613: provider = provider[0] if provider.is_a? Array
1614: if provider.is_a? String
1615: provider = provider.intern
1616: end
1617: @resource.provider = provider
1618:
1619: if provider.is_a?(Puppet::Provider)
1620: provider.class.name
1621: else
1622: provider
1623: end
1624: end
1625: end.parenttype = self
1626: end