Определение

args: — это директива, позволяющая “распаковывать” аргументы со значениями в модуль, чаще всего мы передаем лишь значение по уже ранее предопределенным аргументам (что-то вроде **kwargs в питоне)

Что это значит? Покажу на практике:

- name: Create file
  ansible.builtin.command: touch some_file
  args:
    chdir: /tmp/
    creates: /tmp/some_file

Полностью идентична таске:

- name: Create file
  ansible.builtin.command: 
    cmd: touch some_file
    chdir: /tmp/
    creates: /tmp/some_file

Но в первом варианте мы передаем команду как строку и места куда бы добавить chdir и creates попросту не остается

Приведу еще несколько полезных примеров:

args: и loop:

Используя args: и loop: (или with_X) можно делать таски более компактными, например:

# Без args:
- name: Remove Qemu-NAT line and add DNS server to resolv.conf
  ansible.builtin.lineinfile:
    path: /etc/resolv.conf
    state: "{{ item.state }}"
    line: "{{ item.line }}"
  loop:
    - { state: absent, line: nameserver 10.0.2.3 }
    - { state: present, line: nameserver 192.0.2.1 }

# Используя args:
- name: Remove Qemu-NAT line and add DNS server to resolv.conf
  ansible.builtin.lineinfile:
    path: /etc/resolv.conf
  args: "{{ item }}"
  loop:
    - { state: absent, line: nameserver 10.0.2.3 }
    - { state: present, line: nameserver 192.0.2.1 }

args: и default(omit)

Можно делать разные наборы аргументов для каждого элемента словаря аналогично поведению default(omit)::

# Без args:
- name: Install deb pkgs
  ansible.builtin.apt:
    deb: http://192.0.2.1/repo/somepackage-x86_64.deb
    state: present

- name: Install pkgs on arm host
  ansible.builtin.apt:
    name:
      - firefox
      - chromium
      - libreoffice
    update_cache: true
    state: present
    install_recommends: false

# Используя args:
- name: Install pkgs
  ansible.builtin.apt:
    state: present
  args: "{{ item }}"
  loop:
    - deb: http://192.0.2.1/repo/somepackage-x86_64.deb
    - name:
        - firefox
        - chromium
        - libreoffice
      update_cache: true
      install_recommends: false

В отличие от register:, set_fact: является модулем, а следовательно переменная из set_fact будет принадлежать лишь хосту, который был выбран для run_once:, но я напомню, что set_fact может передаваться между различными play’ями (подробнее в посте про set_fact)

- name: A simple example
  hosts: all
  tasks:
    - name: Run this ask only on one of the hosts
      ansible.builtin.set_fact:
        sample_variable: Played on {{ ansible_host }}
      run_once: true

   # Эта таска упадет с ошибкой на всех других хостах
    - name: Try to show it on all hosts
      ansible.builtin.debug:
        var: sample_variable

Безопасность

Однако стоит учитывать, что использовать переменные в таком случае (если вы пишете роль или коллекцию) может быть небезопасно, потому что можно будет легко переопределить аргументы и значения (https://docs.ansible.com/ansible/devel/reference_appendices/faq.html#when-is-it-unsafe-to-bulk-set-task-arguments-from-a-variable)