DOCUMENTATION:
  name: unique
  author: Brian Coca (@bcoca)
  version_added: "1.4"
  short_description: set of unique items of a list
  description:
    - Creates a list of unique elements (a set) from the provided input list.
  options:
    _input:
      description: A list.
      type: list
      required: true
    case_sensitive:
      description: Whether to consider case when comparing elements.
      default: false
      type: bool
    attribute:
      description: Filter objects with unique values for this attribute.
      type: str
  seealso:
    - plugin_type: filter
      plugin: ansible.builtin.difference
    - plugin_type: filter
      plugin: ansible.builtin.intersect
    - plugin_type: filter
      plugin: ansible.builtin.symmetric_difference
    - plugin_type: filter
      plugin: ansible.builtin.union
EXAMPLES: |
  # return only the unique elements of list1
  # list1: [1, 2, 5, 1, 3, 4, 10]
  {{ list1 | unique }}
  # => [1, 2, 5, 3, 4, 10]

  # return case sensitive unique elements
  {{ ['a', 'A', 'a'] | unique(case_sensitive='true') }}
  # => ['a', 'A']

  # return case insensitive unique elements
  {{ ['b', 'B', 'b'] | unique() }}
  # => ['b']

  # return unique elements of list based on attribute
  # => [{"age": 12, "name": "a" }, { "age": 14, "name": "b"}]
  - debug:
      msg: "{{ sample | unique(attribute='age') }}"
    vars:
      sample:
        - name: a
          age: 12
        - name: b
          age: 14
        - name: c
          age: 14
RETURN:
  _value:
    description: A list with unique elements, also known as a set.
    type: list
