Hi all!

I'm having trouble with a custom type's type-wide validate call.  I've done 
a lot of digging into the Puppet documentation and a lot of Googling and 
haven't found a lot of guidance.   My Puppet version is 3.7.5.

Basically, I have a property defined like this in my type:

newproperty(:servers,:array_matching=>:all) do
    desc "List of database servers; first server in the list will be 
considered the primary server"

    isrequired
    def insync?(is)
      return false unless is == should
      true
    end

end

I want to check that the array is non-empty.   I figured out if I specify a 
validate block inside of the newproperty block then I'll just get each 
individual array member, one at a time, which isn't what I want.   So, 
instead, I implemented a type-wide validate call like this:

Puppet::Type.newtype(:my_type) do

    validate do
               fail("servers should have at least one member")  if 
self[:servers].size == 0
    done


When I try to run puppet resource my_type, I get:

Error: Could not run: undefined method `size' for nil:NilClass

When I do a pp on self, I get something that looks like (in part):

#<Puppet::Type::My_type:0x000000035f7528
 @managed=false,
 @name_var_cache=:name,
 @original_parameters=
  {:provider=>
    #<Puppet::Type::My_type::ProviderMy_type:0x000000035d1350
     @property_flush={},
     @property_hash=
      {
       :servers=>["db1"],
       },
     @resource=#<Puppet::Type::My_type:0x000000035f7528 ...>>},
 @parameters=
  {
   *snip*
},
 @provider=
  #<Puppet::Type::My_type::ProviderMy_type:0x000000035d1350
   @property_flush={},
   @property_hash=
    {
     :servers=>["db1"],
     },
   @resource=#<Puppet::Type::My_type:0x000000035f7528 ...>>,
 @tags=
  #<Puppet::Util::TagSet: {"my_type",
   "mytitle"}>,
 @title="mytitle">

I poked around the types provided by Puppet and it looks like I should be 
able to do

self[:servers]   

to access the property, but in practice that doesn't seem to work.  It 
looks like the data I want is buried in the object, but I'm not sure of the 
correct means to get at it.  



-- 
You received this message because you are subscribed to the Google Groups 
"Puppet Users" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to puppet-users+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/puppet-users/5d8ea6d1-1afd-4983-a059-832d238eb6fa%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to