docs: def snapshot(domain, name=None, suffix=None, **kwargs):
      '''
      Create a snapshot of a VM.
  
      :param domain: domain name
      :param name: Name of the snapshot. If the name is omitted, then will be used original domain
                   name with ISO 8601 time as a suffix.
  
      :param suffix: Add suffix for the new name. Useful in states, where such snapshots
                     can be distinguished from manually created.
      :param connection: libvirt connection URI, overriding defaults
  
          .. versionadded:: 2019.2.0
      :param username: username to connect with, overriding defaults
  
          .. versionadded:: 2019.2.0
      :param password: password to connect with, overriding defaults
  
          .. versionadded:: 2019.2.0
  
      .. versionadded:: 2016.3.0
  
      CLI Example:
  
      .. code-block:: bash
  
          salt '*' virt.snapshot <domain>
      '''
      if name and name.lower() == domain.lower():
          raise CommandExecutionError('Virtual Machine {name} is already defined. '
                                      'Please choose another name for the snapshot'.format(name=name))
      if not name:
          name = "{domain}-{tsnap}".format(domain=domain, tsnap=time.strftime('%Y%m%d-%H%M%S', time.localtime()))
  
      if suffix:
          name = "{name}-{suffix}".format(name=name, suffix=suffix)
  
      doc = ElementTree.Element('domainsnapshot')
      n_name = ElementTree.SubElement(doc, 'name')
      n_name.text = name
  
      conn = __get_conn(**kwargs)
      _get_domain(conn, domain).snapshotCreateXML(
          salt.utils.stringutils.to_str(ElementTree.tostring(doc))
      )
      conn.close()
  
      return {'name': name}