Ответ
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 — это механизм повторения действий над коллекцией данных. Они часто используются вместе: переменная-список передается в цикл для обработки.