# File lib/puppet/type.rb, line 676
676:   def retrieve
677:     fail "Provider #{provider.class.name} is not functional on this host" if self.provider.is_a?(Puppet::Provider) and ! provider.class.suitable?
678: 
679:     result = Puppet::Resource.new(type, title)
680: 
681:     # Provide the name, so we know we'll always refer to a real thing
682:     result[:name] = self[:name] unless self[:name] == title
683: 
684:     if ensure_prop = property(:ensure) or (self.class.validattr?(:ensure) and ensure_prop = newattr(:ensure))
685:       result[:ensure] = ensure_state = ensure_prop.retrieve
686:     else
687:       ensure_state = nil
688:     end
689: 
690:     properties.each do |property|
691:       next if property.name == :ensure
692:       if ensure_state == :absent
693:         result[property] = :absent
694:       else
695:         result[property] = property.retrieve
696:       end
697:     end
698: 
699:     result
700:   end