When you look into puppet source type.rb, ensurable accept a block. If
you pass a block like this

  ensurable  do
    [...]
  end

it is exactly the same as if you'd written

  newproperty(:ensure, :parent => Puppet::Property::Ensure) do
    [...]
  end

If you do not pass a block puppet will fill it with one methodcall:
defaultvalues. You can now look into property/ensure.rb what this
actually means. It defines two accepted values :present and :absent
and the default will be :present.

-Stefan

On Fri, Jan 21, 2011 at 07:13:50PM +0000, Dick Davies wrote:
> Thanks for point 2, much appreciated. Is the 'global' validate
> option documented anywhere?
> 
> on point 1, using the 'ensurable' magic means I don't have anywhere
> to stick the defaultto keyword (I tried
> 
> ensurable do
>    defaultto 'present'
> end
> 
> but didn't seem to do the trick (blows up with a
> "change from present to present failed: The rabbitmq_user provider can not
> handle attribute ensure" . Am I out of luck without an
> explicit newparam{} block to work in?
> 
> On Fri, Jan 21, 2011 at 4:40 PM, Dan Bode <d...@puppetlabs.com> wrote:
> 
> >
> >
> > On Fri, Jan 21, 2011 at 8:31 AM, Dick Davies 
> > <rasput...@hellooperator.net>wrote:
> >
> >> I've almost finished a pretty simple type/provider to manage
> >> RabbitMQ users and virtual hosts.
> >> I'm using the 'ensurable' keyword in my type to save a bit of boilerplate.
> >>
> >>  Type is below (the provider is just a wrapper around the 'rabbitmqctl'
> >> command.
> >>
> >> Have a feeling there's a developer guide somewhere I haven't found
> >> (been working from the puppetlabs site and @kartars blog).
> >> Couple of basic questions:
> >>
> >> 1. how can I set the type to default to 'ensure => present, isadmin =>
> >> false' ?
> >>     Not sure if the ensurable mechanism is causing the first to be hard,
> >>     but I can't see a way to set defaults in general
> >>
> >
> > you can call the defaultto method in the param/property.
> >
> >
> >> 2. is there a way to mark attributes as required?
> >>
> >
> > unfortunately not in the param/property blocks, there is supposed to be a
> > method called isrequired,but it does not work. You can do this with the
> > validate method on the type
> >
> >
> >
> >> I've provided a validation for the initial_password parameter, but it only
> >> seems to fire if the parameter is there;
> >> it doesn't get checked if the parameter is absent.
> >>
> >>
> >>
> >
> >> =======================================================
> >> # cat lib/puppet/type/rabbitmq_user.rb
> >> Puppet::Type.newtype(:rabbitmq_user) do
> >>   @doc = "Manage RabbitMQ users"
> >>
> >>   ensurable
> >>
> >>   newparam(:name) do
> >>     desc "The name of the user"
> >>
> >>     validate do |n|
> >>       raise ArgumentError, "cannot be empty" if n.empty?
> >>       raise ArgumentError, "can't contain spaces" if ( n =~ %r(\s+) )
> >>       resource[:provider] = :rabbitmq_user
> >>     end
> >>
> >>     isnamevar
> >>   end
> >>
> >>   newparam(:initial_password) do
> >>     desc "the password for the user - only set on creation time"
> >>
> >>         defaultto 'foo'
> >
> >
> >>     validate do |n|
> >>       raise ArgumentError, "cannot be empty" if (n.empty? or n.nil?)
> >>       resource[:provider] = :rabbitmq_user
> >>     end
> >>   end
> >>
> >
> >       validate do
> >         raise ArgumentError "initial_password is a required param" unless
> > self[:initial_password]
> >       end
> >
> >>  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<puppet-users%2bunsubscr...@googlegroups.com>
> >> .
> >> For more options, visit this group at
> >> http://groups.google.com/group/puppet-users?hl=en.
> >>
> >
> >  --
> > 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<puppet-users%2bunsubscr...@googlegroups.com>
> > .
> > For more options, visit this group at
> > http://groups.google.com/group/puppet-users?hl=en.
> >
> 
> -- 
> 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.
> 

Attachment: pgpX0ZSX4A7dR.pgp
Description: PGP signature

Reply via email to