В чем разница между var и for в Ansible?

«В чем разница между var и for в Ansible?» — вопрос из категории Ansible, который задают на 23% собеседований Devops Инженер. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

var и for (или его аналог loop) в Ansible служат принципиально разным целям: один для хранения данных, другой для итерации.

var (Переменные)

  • Назначение: Объявление и хранение данных (строк, чисел, списков, словарей).
  • Контекст: Используется в ключевых словах vars:, set_fact:, или при определении переменных в инвентаре или файлах.
  • Примеры:
    # Определение переменных на уровне плейбука
    - hosts: all
      vars:
        package_name: "nginx"
        server_ports: [80, 443]
      tasks:
        - name: Install package
          ansible.builtin.apt:
            name: "{{ package_name }}"
            state: present
    # Динамическое задание факта
    - name: Register a variable
      ansible.builtin.shell: cat /etc/os-release
      register: os_info

for / loop (Циклы)

  • Назначение: Многократное выполнение задачи для каждого элемента в списке или словаре.
  • Контекст: Используется внутри задачи с ключевым словом loop: или в шаблонах Jinja2.
  • Примеры:
    - name: Ensure multiple packages are installed
      ansible.builtin.apt:
        name: "{{ item }}"
        state: present
      loop:
        - nginx
        - postgresql-client
        - python3-pip
    - name: Create users from a list of dictionaries
      ansible.builtin.user:
        name: "{{ item.name }}"
        groups: "{{ item.groups }}"
        state: present
      loop:
        - { name: 'alice', groups: 'wheel' }
        - { name: 'bob', groups: 'developers' }

Итог: var — это контейнер для данных. for/loop — это механизм повторения действий над коллекцией данных. Они часто используются вместе: переменная-список передается в цикл для обработки.