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.