    # File lib/fog/vsphere/compute.rb, line 61
            def convert_vm_mob_ref_to_attr_hash(vm_mob_ref)
              return nil unless vm_mob_ref

              props = vm_mob_ref.collect!(*ATTR_TO_PROP.values.uniq)
              # NOTE: Object.tap is in 1.8.7 and later.
              # Here we create the hash object that this method returns, but first we need
              # to add a few more attributes that require additional calls to the vSphere
              # API. The hypervisor name and mac_addresses attributes may not be available
              # so we need catch any exceptions thrown during lookup and set them to nil.
              #
              # The use of the "tap" method here is a convenience, it allows us to update the
              # hash object without explicitly returning the hash at the end of the method.
              Hash[ATTR_TO_PROP.map { |k,v| [k.to_s, props[v]] }].tap do |attrs|
                attrs['id'] ||= vm_mob_ref._ref
                attrs['mo_ref'] = vm_mob_ref._ref
                # The name method "magically" appears after a VM is ready and
                # finished cloning.
                if attrs['hypervisor'].kind_of?(RbVmomi::VIM::HostSystem) then
                  # If it's not ready, set the hypervisor to nil
                  attrs['hypervisor'] = attrs['hypervisor'].name rescue nil
                end
                # This inline rescue catches any standard error.  While a VM is
                # cloning, a call to the macs method will throw and NoMethodError
                attrs['mac_addresses'] = vm_mob_ref.macs rescue nil
                attrs['path'] = get_folder_path(vm_mob_ref.parent)
              end
            end