docs: def _salt_send_event(opaque, conn, data):
      '''
      Convenience function adding common data to the event and sending it
      on the salt event bus.
  
      :param opaque: the opaque data that is passed to the callback.
                     This is a dict with 'prefix', 'object' and 'event' keys.
      :param conn: libvirt connection
      :param data: additional event data dict to send
      '''
      tag_prefix = opaque['prefix']
      object_type = opaque['object']
      event_type = opaque['event']
  
      # Prepare the connection URI to fit in the tag
      # qemu+ssh://user@host:1234/system -> qemu+ssh/user@host:1234/system
      uri = urlparse(conn.getURI())
      uri_tag = [uri.scheme]
      if uri.netloc:
          uri_tag.append(uri.netloc)
      path = uri.path.strip('/')
      if path:
          uri_tag.append(path)
      uri_str = "/".join(uri_tag)
  
      # Append some common data
      all_data = {
          'uri': conn.getURI()
      }
      all_data.update(data)
  
      tag = '/'.join((tag_prefix, uri_str, object_type, event_type))
  
      # Actually send the event in salt
      if __opts__.get('__role') == 'master':
          salt.utils.event.get_master_event(
              __opts__,
              __opts__['sock_dir']).fire_event(all_data, tag)
      else:
          __salt__['event.send'](tag, all_data)