docs: def list_nodes_full(session=None):
      '''
      List full virtual machines
  
        .. code-block:: bash
  
            salt-cloud -F
  
      '''
      if session is None:
          session = _get_session()
  
      ret = {}
      vms = session.xenapi.VM.get_all()
      for vm in vms:
          record = session.xenapi.VM.get_record(vm)
          if not record['is_a_template'] and not record['is_control_domain']:
              # deal with cases where the VM doesn't have 'base_template_name' attribute
              try:
                  base_template_name = record['other_config']['base_template_name']
              except Exception:
                  base_template_name = None
                  log.debug(
                      'VM %s, doesnt have base_template_name attribute',
                      record['name_label']
                  )
              vm_cfg = session.xenapi.VM.get_record(vm)
              vm_cfg['id'] = record['uuid']
              vm_cfg['name'] = record['name_label']
              vm_cfg['image'] = base_template_name
              vm_cfg['size'] = None
              vm_cfg['state'] = record['power_state']
              vm_cfg['private_ips'] = get_vm_ip(record['name_label'], session)
              vm_cfg['public_ips'] = None
              if 'snapshot_time' in vm_cfg.keys():
                  del vm_cfg['snapshot_time']
              ret[record['name_label']] = vm_cfg
  
      provider = __active_provider_name__ or 'xen'
      if ':' in provider:
          comps = provider.split(':')
          provider = comps[0]
      log.debug('ret: %s', ret)
      log.debug('provider: %s', provider)
      log.debug('__opts__: %s', __opts__)
      __utils__['cloud.cache_node_list'](ret, provider, __opts__)
      return ret