docs: def create_snapshot(config='root', snapshot_type='single', pre_number=None,
                      description=None, cleanup_algorithm='number', userdata=None,
                      **kwargs):
      '''
      Creates an snapshot
  
      config
          Configuration name.
      snapshot_type
          Specifies the type of the new snapshot. Possible values are
          single, pre and post.
      pre_number
          For post snapshots the number of the pre snapshot must be
          provided.
      description
          Description for the snapshot. If not given, the salt job will be used.
      cleanup_algorithm
          Set the cleanup algorithm for the snapshot.
  
      number
          Deletes old snapshots when a certain number of snapshots
          is reached.
      timeline
          Deletes old snapshots but keeps a number of hourly,
          daily, weekly, monthly and yearly snapshots.
      empty-pre-post
          Deletes pre/post snapshot pairs with empty diffs.
      userdata
          Set userdata for the snapshot (key-value pairs).
  
      Returns the number of the created snapshot.
  
      CLI example:
  
      .. code-block:: bash
  
          salt '*' snapper.create_snapshot
      '''
      if not userdata:
          userdata = {}
  
      jid = kwargs.get('__pub_jid')
      if description is None and jid is not None:
          description = 'salt job {0}'.format(jid)
  
      if jid is not None:
          userdata['salt_jid'] = jid
  
      new_nr = None
      try:
          if snapshot_type == 'single':
              new_nr = snapper.CreateSingleSnapshot(config, description,
                                                    cleanup_algorithm, userdata)
          elif snapshot_type == 'pre':
              new_nr = snapper.CreatePreSnapshot(config, description,
                                                 cleanup_algorithm, userdata)
          elif snapshot_type == 'post':
              if pre_number is None:
                  raise CommandExecutionError(
                      "pre snapshot number 'pre_number' needs to be"
                      "specified for snapshots of the 'post' type")
              new_nr = snapper.CreatePostSnapshot(config, pre_number, description,
                                                  cleanup_algorithm, userdata)
          else:
              raise CommandExecutionError(
                  "Invalid snapshot type '{0}'".format(snapshot_type))
      except dbus.DBusException as exc:
          raise CommandExecutionError(
              'Error encountered while listing changed files: {0}'
              .format(_dbus_exception_to_reason(exc, locals()))
          )
      return new_nr