I have been messing with this for a while and have had no luck so
hoping someone here can help.

I created a customer type called autofs and a provider that uses
ParsedFile to parse the auto_direct file according to what I found
here: http://www.kartar.net/2010/02/puppet-parsedfile-types-and-providers/

The type is located at .../devl/common/lib/puppet/type/autofs.rb
The provider is located at .../devl/common/lib/puppet/provider/autofs/
autofs.rb

I get the following when running puppetd:
...
notice: /File[/var/opt/lib/puppet]/ensure: created
notice: /File[/var/opt/lib/puppet/provider]/ensure: created
notice: /File[/var/opt/lib/puppet/provider/autofs]/ensure: created
notice: /File[/var/opt/lib/puppet/provider/autofs/autofs.rb]/ensure:
defined content as '{md5}8469013512e708aaf85740caecae74b8'
notice: /File[/var/opt/lib/puppet/type]/ensure: created
notice: /File[/var/opt/lib/puppet/type/autofs.rb]/ensure: defined
content as '{md5}66817f006dd23e31556e88a3aa837fd2'
info: Loading downloaded plugin /var/opt/lib/puppet/type/autofs.rb
info: Loading downloaded plugin /var/opt/lib/puppet/provider/autofs/
autofs.rb
debug: Reloading parsed autofs provider
...
err: Could not retrieve catalog from remote server: Error 400 on
SERVER: Puppet::Parser::AST::Resource failed with error ArgumentError:
Invalid resource type autofs at .../devl/base/manifests/autodf.pp:8 on
node testserver.test.com


The manifest that uses the type looks like this;
   autofs {
      "/mnt/test":
         source => "testnas:/vol/vol3/mountme";
   }



The type is not finished, but so far is coded as follows:

Puppet::Type.newtype(:autofs) do
  @doc = "Manage contents of autofs maps, etc."

  ensurable

  newproperty(:path) do
    desc "Location of the auto fs file to manage."

    defaultto {
      if
        @resource.class.defaultprovider.ancestors.include?
(Puppet::Provider::autofs)
        @resource.class.defaultprovider.default_target
      else
        nil
      end
    }

    validate do |value|
      unless value =~ /^\/[a-z0-9]+/
        raise ArgumentError, "#{value} is not a valid file path"
      end
    end
  end

  newproperty(:mount) do
    desc "The mountpoint where autofs should mount the file system"

    isnamevar

    validate do |value|
      if value =~ /^\s*#/
        raise ArgumentError, "#{value} is not a valid key."
      end
    end
  end

  newproperty(:source) do
    desc "The source of the file system to mount."

    validate do |value|
      unless value =~ /[a-z0-9\.]+:\/[a-z0-9\.]+/
        raise ArgumentError, "#{value} is not a valid nfs source."
      end
    end
  end

  newproperty(:options) do
    desc "The options to use when mounting the file system."

    validate do |value|
      unless value =~ /^-/
        raise ArgumentError, "#{value} is not a valid option."
      end
    end
  end
end



The provider is coded as follows:
require 'puppet/provider/parsedfile'

path = nil
case Facter.value(:operatingsystem)
when "Solaris"; path = "/etc/auto_direct"
else
  path = "/etc/auto.direct"
end

raise Puppet::Error, "Path not defined." unless File.exists?(path)

Puppet::Type.type(:autofs).provide(:parsed, :parent =>
Puppet::Provider::ParsedFile, :default_target => path, :filetype
=> :flat) do

  desc "The autofs provider that uses the ParsedFile class"

  text_line :comment, :match => /^#/;
  text_line :blank, :match => /^\s*$/;

  record_line :parsed, :fields => %w{name options source},
    :optional => %w{options}
#    :match => %r{(\S+)\s+(\S+)\s+(\S+)},
end

-- 
You received this message because you are subscribed to the Google Groups 
"Puppet Users" group.
To post to this group, send email to puppet-users@googlegroups.com.
To unsubscribe from this group, send email to 
puppet-users+unsubscr...@googlegroups.com.
For more options, visit this group at 
http://groups.google.com/group/puppet-users?hl=en.

Reply via email to