def vm_registered(vm_name, datacenter, placement, vm_file, power_on=False):
    '''
    Registers a virtual machine if the machine files are available on
    the main datastore.
    '''
    result = {'name': vm_name,
              'result': None,
              'changes': {},
              'comment': ''}

    vmx_path = '{0}{1}'.format(vm_file.folderPath, vm_file.file[0].path)
    log.trace('Registering virtual machine with vmx file: %s', vmx_path)
    service_instance = __salt__['vsphere.get_service_instance_via_proxy']()
    try:
        __salt__['vsphere.register_vm'](vm_name, datacenter,
                                        placement, vmx_path,
                                        service_instance=service_instance)
    except salt.exceptions.VMwareMultipleObjectsError as exc:
        log.error('Error: %s', exc)
        if service_instance:
            __salt__['vsphere.disconnect'](service_instance)
        result.update({'result': False,
                       'comment': six.text_type(exc)})
        return result
    except salt.exceptions.VMwareVmRegisterError as exc:
        log.error('Error: %s', exc)
        if service_instance:
            __salt__['vsphere.disconnect'](service_instance)
        result.update({'result': False,
                       'comment': six.text_type(exc)})
        return result

    if power_on:
        try:
            __salt__['vsphere.power_on_vm'](vm_name, datacenter,
                                            service_instance=service_instance)
        except salt.exceptions.VMwarePowerOnError as exc:
            log.error('Error: %s', exc)
            if service_instance:
                __salt__['vsphere.disconnect'](service_instance)
            result.update({
                'result': False,
                'comment': six.text_type(exc)})
            return result
    __salt__['vsphere.disconnect'](service_instance)
    result.update({'result': True,
                   'changes': {'name': vm_name, 'power_on': power_on},
                   'comment': 'Virtual machine '
                              '{0} registered successfully'.format(vm_name)})

    return result