# class Puppet::Property::Ensure

This property is automatically added to any {Puppet::Type} that responds to the methods ‘exists?’, ‘create’, and ‘destroy’.

Ensure defaults to having the wanted _(should)_ value `:present`.

@api public

### Public Class Methods

defaultvalues() click to toggle source

    # File lib/puppet/property/ensure.rb, line 13
    def self.defaultvalues
      newvalue(:present) do
        if @resource.provider and @resource.provider.respond_to?(:create)
          @resource.provider.create
        else
          @resource.create
        end
        nil # return nil so the event is autogenerated
      end

      newvalue(:absent) do
        if @resource.provider and @resource.provider.respond_to?(:destroy)
          @resource.provider.destroy
        else
          @resource.destroy
        end
        nil # return nil so the event is autogenerated
      end

      defaultto do
        if @resource.managed?
          :present
        else
          nil
        end
      end

      # This doc will probably get overridden
      @doc ||= "The basic property that the resource should be in."
    end

inherited(sub) click to toggle source

    # File lib/puppet/property/ensure.rb, line 44
    def self.inherited(sub)
      # Add in the two properties that everyone will have.
      sub.class_eval do
      end
    end

### Public Instance Methods

change_to_s(currentvalue, newvalue) click to toggle source

    # File lib/puppet/property/ensure.rb, line 50
    def change_to_s(currentvalue, newvalue)
      begin
        if currentvalue == :absent or currentvalue.nil?
          return "created"
        elsif newvalue == :absent
          return "removed"
        else
          return "#{self.name} changed '#{self.is_to_s(currentvalue)}' to '#{self.should_to_s(newvalue)}'"
        end
      rescue Puppet::Error, Puppet::DevError
        raise
      rescue => detail
        raise Puppet::DevError, "Could not convert change #{self.name} to string: #{detail}"
      end
    end

retrieve() click to toggle source

Retrieves the is value for the ensure property. The existence of the resource is checked by first consulting the provider (if it responds to `:exists`), and secondly the resource. A a value of `:present` or `:absent` is returned depending on if the managed entity exists or not.

@return [Symbol] a value of `:present` or `:absent` depending on if it exists or not @raise [Puppet::DevError] if neither the provider nor the resource responds to `:exists`

    # File lib/puppet/property/ensure.rb, line 74
    def retrieve
      # XXX This is a problem -- whether the object exists or not often
      # depends on the results of other properties, yet we're the first property
      # to get checked, which means that those other properties do not have
      # @is values set.  This seems to be the source of quite a few bugs,
      # although they're mostly logging bugs, not functional ones.
      if prov = @resource.provider and prov.respond_to?(:exists?)
        result = prov.exists?
      elsif @resource.respond_to?(:exists?)
        result = @resource.exists?
      else
        raise Puppet::DevError, "No ability to determine if #{@resource.class.name} exists"
      end
      if result
        return :present
      else
        return :absent
      end
    end