Each property defined in the type should implement a GET and SET method in the provider.
Puppet will then invoke these methods during a Puppet run to manage the property as follows:
- The GET method is called initially to retrieve the current value
- This is subsequently compared against the value declared by the user in the Puppet DSL
- If the values are different, then the SET method is invoked to update that value if necessary.
This is shown in the following code:
Puppet::Type.type(:mynewtype).provide(:yum) do ... def version version = rpm('-q', resource[:name]) if version =~ /^#{Regexp.escape(resource[:name])}-(.*)/ $1 end end def version=(value) yum('install', "#{resource[:name]}-#{resource[:version]}") ...