1462: def self.providify
1463: return if @paramhash.has_key? :provider
1464:
1465: newparam(:provider) do
1466: desc "The specific backend for #{self.name.to_s} to use. You will
1467: seldom need to specify this -- Puppet will usually discover the
1468: appropriate provider for your platform."
1469:
1470:
1471:
1472: class << self
1473: attr_accessor :parenttype
1474: end
1475:
1476:
1477: def self.doc
1478: @doc + " Available providers are:\n\n" + parenttype.providers.sort { |a,b|
1479: a.to_s <=> b.to_s
1480: }.collect { |i|
1481: "* **#{i}**: #{parenttype().provider(i).doc}"
1482: }.join("\n")
1483: end
1484:
1485: defaultto {
1486: @resource.class.defaultprovider.name
1487: }
1488:
1489: validate do |provider_class|
1490: provider_class = provider_class[0] if provider_class.is_a? Array
1491: provider_class = provider_class.class.name if provider_class.is_a?(Puppet::Provider)
1492:
1493: unless provider = @resource.class.provider(provider_class)
1494: raise ArgumentError, "Invalid #{@resource.class.name} provider '#{provider_class}'"
1495: end
1496: end
1497:
1498: munge do |provider|
1499: provider = provider[0] if provider.is_a? Array
1500: provider = provider.intern if provider.is_a? String
1501: @resource.provider = provider
1502:
1503: if provider.is_a?(Puppet::Provider)
1504: provider.class.name
1505: else
1506: provider
1507: end
1508: end
1509: end.parenttype = self
1510: end