Найти в Дзене
Infra as Code по-русски

Ansible: переменные, факты и секреты — простое объяснение для новичков

Ansible переменные, факты и секреты — это основа любой автоматизации, но именно здесь новички чаще всего путаются. В этой статье простыми словами разберём приоритет переменных Ansible, работу с register и set_fact, что такое facts, как использовать Ansible Vault и зачем нужны vars_prompt и no_log.
Если вы только начинаете работать с Ansible и хотите понять, как всё реально работает, — эта инструкция для вас. Часть тем описанных в этой статье уже поднималась ранне. Но без этих повторений на мой взгляд данная статья не была бы полностью завершенной. Тут мы углубляемся в переменные, закрываю пробелы в знании. Если вы хоть раз задавались вопросом: «Почему Ansible взял не то значение переменной?» или «Куда делся пароль, и почему он теперь в логах?» — добро пожаловать. Почти все реальные проблемы с Ansible упираются в переменные, факты и секреты. Сейчас разложим всё по полочкам — без магии и заумных терминов. Эта статья особенно полезна, если вы: В Ansible одна и та же переменная может бы
Оглавление

Аннотация

Ansible переменные, факты и секреты — это основа любой автоматизации, но именно здесь новички чаще всего путаются. В этой статье простыми словами разберём приоритет переменных Ansible, работу с register и set_fact, что такое facts, как использовать Ansible Vault и зачем нужны vars_prompt и no_log.

Если вы только начинаете работать с Ansible и хотите
понять, как всё реально работает, — эта инструкция для вас.

Часть тем описанных в этой статье уже поднималась ранне. Но без этих повторений на мой взгляд данная статья не была бы полностью завершенной. Тут мы углубляемся в переменные, закрываю пробелы в знании.

Хук: зачем вообще это знать

Если вы хоть раз задавались вопросом:

«Почему Ansible взял не то значение переменной?»

или

«Куда делся пароль, и почему он теперь в логах?»

— добро пожаловать. Почти все реальные проблемы с Ansible упираются в переменные, факты и секреты. Сейчас разложим всё по полочкам — без магии и заумных терминов.

Контекст: когда это важно

Эта статья особенно полезна, если вы:

  • только начали писать playbook’и;
  • используете роли и group_vars;
  • работаете с паролями, токенами, ключами;
  • хотите, чтобы playbook’и были предсказуемыми и безопасными.

Приоритет переменных Ansible: кто кого переиграет

В Ansible одна и та же переменная может быть задана в нескольких местах. И тогда возникает вопрос — чьё значение победит?

Упрощённая лестница приоритетов (снизу вверх):

  1. defaults роли
  2. переменные в inventory (group_vars, host_vars)
  3. vars в playbook
  4. vars_files
  5. переменные роли (vars/main.yml)
  6. set_fact
  7. extra_vars (-e key=value)

👉 Чем выше — тем сильнее.

Важно:

extra_vars всегда побеждают. Это абсолютный чемпион.

Типичная ошибка

Задал переменную в defaults, а Ansible её «игнорирует»

На самом деле её переопределили выше — например, в group_vars.

Мини-итог

  • Для значений «по умолчанию» → defaults
  • Для обязательных значений → vars
  • Для временных оверрайдов → -e

Register и set_fact: как запоминать результаты

Ansible умеет сохранять результат выполнения модуля.

Пример с register

-2

Теперь можно читать результат:

-3

set_fact — создаём свои переменные

-4

Зачем это нужно?

  • разбирать stdout, stderr
  • проверять rc (код возврата)
  • хранить промежуточную логику

Типичная ошибка:

Пытаться использовать register
до того, как задача выполнилась.

Факты Ansible: что это и зачем

Факты — это информация о системе, которую Ansible собирает сам:

  • ОС
  • IP-адреса
  • память
  • CPU
  • hostname

Как включаются факты

По умолчанию:

-5

Можно собрать вручную:

-6

Ускоряем запуск

Если факты не нужны:

-7

Локальные факты (очень полезно)

Файлы в:

-8

Пример:

-9

Использование:

-10

Отлично подходит для кастомной логики.

Секреты и Ansible Vault: база без боли

Ansible Vault — это способ хранить пароли и токены в зашифрованном виде.

Создать зашифрованный файл

-11

Отредактировать

-12

Подключить в playbook

-13

Best practices

  • секреты отдельно от обычных vars
  • один vault — один проект
  • использовать --vault-id
-14

vars_prompt и no_log: защита от утечек

Интерактивный ввод

-15

Скрываем в логах

-16

Важно:

no_log скрывает
всё, включая ошибки. Используйте точечно.

Почему всё это так работает

Ansible проектировался как декларативный инструмент, где важна предсказуемость.

Чёткий приоритет переменных, явная работа с фактами и строгая изоляция секретов — это не ограничения, а защита от хаоса в инфраструктуре.

Что сделали

В этой статье мы разложили Ansible по полочкам, без магии и «ну это потом поймёшь».

Ты узнал,
как Ansible выбирает переменные, почему одно и то же значение может «вдруг» меняться, и как сделать поведение playbook’ов предсказуемым.

Мы разобрали:

  • как правильно работать с результатами задач через register и set_fact;
  • зачем нужны facts, когда их можно отключать и как добавлять свои;
  • как безопасно хранить секреты с помощью Ansible Vault;
  • как вводить пароли и токены так, чтобы они не утекли в логи.

Если раньше Ansible казался «чёрным ящиком», теперь у него появилась логика и правила.

Сделать прямо сейчас

Если хочешь закрепить материал — вот минимальный набор действий, который можно сделать уже сегодня:

  • Проверь свои playbook’и:

    не лежат ли важные переменные одновременно в defaults и group_vars
  • Вынеси все пароли и токены в отдельный файл и зашифруй его через Ansible Vault
  • Добавь no_log: true ко всем задачам, где используются секреты
  • Посмотри, где можно заменить «костыли» на register + set_fact
  • Если playbook тормозит — попробуй gather_facts: false и включай факты только там, где они реально нужны

Даже эти простые шаги сразу делают Ansible-код чище, безопаснее и понятнее.

CTA

Если тебе зашёл такой формат объяснений — подпишись на канал.

Есть вопрос или живой кейс?

Напиши в комментариях — разберём его в следующей статье.