Циклы по словарям
Создавайте пользователей из данных в формате «ключ — значение»
«Циклы по словарям» — бесплатный урок DevOps Bootcamp на CoddyKit. Это урок 2 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения DevOps Bootcamp, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс DevOps Bootcamp содержит 4 уроков всего.
Одних списков недостаточно
Для создания пользователей нужно больше, чем имя: группа, оболочка, состояние. Плоский список не может хранить все эти данные. Вам понадобится список словарей. 🗂️
Список словарей
Каждая запись списка становится небольшим словарём пар «ключ — значение». Поэтому в одной итерации цикла доступны несколько именованных полей.
loop:
- { name: alice, group: admin }
- { name: bob, group: dev }Доступ к ключам через item.key
Если item — словарь, прочитать каждое поле можно с помощью item.fieldname. Например, item.name и item.group получают значения из текущей записи.
- name: Add users
ansible.builtin.user:
name: "{{ item.name }}"
group: "{{ item.group }}"
loop:
- { name: alice, group: admin }
- { name: bob, group: dev }Более удобная многострочная форма
Встроенные фигурные скобки быстро загромождают запись. Для лучшей читаемости записывайте каждый словарь в несколько строк, если в нём много ключей.
loop:
- name: alice
group: admin
shell: /bin/bash
- name: bob
group: dev
shell: /bin/zshПолучение списка из vars
Определите список словарей как переменную, а затем перебирайте его. Данные хранятся в одном месте, а задача остаётся короткой и пригодной для повторного использования.
vars:
users:
- { name: alice, group: admin }
tasks:
- ansible.builtin.user:
name: "{{ item.name }}"
loop: "{{ users }}"Перебор настоящего словаря
Чтобы перебрать настоящий словарь пар «ключ — значение», пропустите его через фильтр dict2items, чтобы каждая пара стала отдельным элементом для цикла.
loop: "{{ ports | dict2items }}"item.key и item.value
После применения dict2items каждый элемент предоставляет item.key и item.value — имя и данные из исходного отображения.
- ansible.builtin.debug:
msg: "{{ item.key }} = {{ item.value }}"
loop: "{{ settings | dict2items }}"Сочетание обязательных и необязательных ключей
Не каждой записи нужны все ключи. Объедините цикл с фильтром default, чтобы для отсутствующих полей использовалось разумное значение по умолчанию.
shell: "{{ item.shell | default('/bin/sh') }}"Словари упорядочивают данные
Объединение связанных полей для каждого элемента помогает отделить данные от логики. Чтобы изменить пользователя, достаточно изменить данные, а не саму задачу.
Полная идемпотентность
Каждая итерация по словарю — отдельный вызов модуля, поэтому Ansible сообщает changed или ok для каждого пользователя, как и при работе с простыми списками.
Отлично подходит для массовой настройки
Пользователи, виртуальные хосты, правила брандмауэра — всё, где для каждой записи нужно несколько атрибутов, идеально подходит для списка словарей.
Быстрая проверка
Вы перебираете список словарей. Как прочитать отдельное поле?
Итоги: циклы по словарям
Вы перебрали списки словарей, прочитали поля item.name и использовали dict2items для настоящих отображений. Далее: вложенные циклы. 🎉
Часто задаваемые вопросы
Урок «Циклы по словарям» бесплатный?
Да — полный текст урока «Циклы по словарям» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс DevOps Bootcamp, подпишись на CoddyKit PRO. Курс DevOps Bootcamp содержит 4 уроков всего.
Чему я научусь в уроке «Циклы по словарям»?
Создавайте пользователей из данных в формате «ключ — значение» Ты практикуешь DevOps Bootcamp с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать DevOps Bootcamp?
Предыдущий опыт не требуется. DevOps Bootcamp на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 2 из 4.
Сколько времени занимает урок «Циклы по словарям»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке DevOps Bootcamp?
Да. Каждый урок DevOps Bootcamp включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- Ключевое слово loop для списка
- Циклы по словарям
- Вложенные циклы с subelements
- loop_control: label, index и pause