Provider methods
By default, you have to define all of your getter and setter methods. For simple cases, this is sufficient — you just implement the code that does the work for that property. For the more complicated aspects of provider implementation, Puppet has prefetching, resource methods, and flushing.
Prefetching
First, Puppet transactions prefetch provider
information by calling prefetch
on each used
provider type. This calls the instances
method in
turn, which returns a list of provider instances with the current resource state
already retrieved and stored in a @property_hash
instance variable. The prefetch method then tries to find any matching resources,
and assigns the retrieved providers to found resources. This way you can get
information on all of the resources you’re managing in just a few method calls,
instead of having to call all of the getter methods for every property being
managed. Note that it also means that providers are often getting replaced, so you
cannot maintain state in a provider.
Resource methods
For providers that directly modify the system when a setter method is called, there’s
no substitute for defining them manually. But for resources that get flushed to disk
in one step, such as the ParsedFile
providers, there
is a mk_resource_methods
class method that creates a
getter and setter for each property on the resource. These methods retrieve and set
the appropriate value in the @property_hash
variable.
Flushing
Many providers model files or parts of files, so it makes sense to save up all of the
writes and do them in one run. Providers that need this functionality can define a
flush instance method to do this. The transaction calls this method after all values
are synced (which means that the provider should have them all in its @property_hash
variable) but before refresh is called on
the resource (if appropriate).