Updates a virtual machine configuration if there is a difference between
    the given and deployed configuration.

def vm_updated(name, vm_name, cpu, memory, image, version, interfaces,
               disks, scsi_devices, serial_ports, datacenter, datastore,
               cd_dvd_drives=None, sata_controllers=None,
               advanced_configs=None, power_on=False):
    '''
    Updates a virtual machine configuration if there is a difference between
    the given and deployed configuration.
    '''
    result = {'name': name,
              'result': None,
              'changes': {},
              'comment': ''}

    service_instance = __salt__['vsphere.get_service_instance_via_proxy']()
    current_config = __salt__['vsphere.get_vm_config'](
        vm_name,
        datacenter=datacenter,
        objects=False,
        service_instance=service_instance)

    diffs = __salt__['vsphere.compare_vm_configs'](
        {'name': vm_name,
         'cpu': cpu,
         'memory': memory,
         'image': image,
         'version': version,
         'interfaces': interfaces,
         'disks': disks,
         'scsi_devices': scsi_devices,
         'serial_ports': serial_ports,
         'datacenter': datacenter,
         'datastore': datastore,
         'cd_drives': cd_dvd_drives,
         'sata_controllers': sata_controllers,
         'advanced_configs': advanced_configs},
        current_config)
    if not diffs:
        result.update({
            'result': True,
            'changes': {},
            'comment': 'Virtual machine {0} is already up to date'.format(vm_name)})
        return result

    if __opts__['test']:
        comment = 'State vm_updated will update virtual machine \'{0}\' ' \
                  'in datacenter \'{1}\':\n{2}'.format(vm_name,
                                                       datacenter,
                  '\n'.join([':\n'.join([key, difference.changes_str])
                      for key, difference in six.iteritems(diffs)]))
        result.update({'result': None,
                       'comment': comment})
        __salt__['vsphere.disconnect'](service_instance)
        return result

    try:
        changes = __salt__['vsphere.update_vm'](vm_name, cpu, memory, image,
                                                version, interfaces, disks,
                                                scsi_devices, serial_ports,
                                                datacenter, datastore,
                                                cd_dvd_drives=cd_dvd_drives,
                                                sata_controllers=sata_controllers,
                                                advanced_configs=advanced_configs,
                                                service_instance=service_instance)
    except salt.exceptions.CommandExecutionError 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)
        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
        changes.update({'power_on': True})

    __salt__['vsphere.disconnect'](service_instance)

    result = {'name': name,
              'result': True,
              'changes': changes,
              'comment': 'Virtual machine '
                         '{0} was updated successfully'.format(vm_name)}

    return result