Когда мы только начинаем работать с Ansible, возникает довольно естественный вопрос: А что будет, если я запущу playbook второй раз? В обычном скрипте это иногда заканчивается не очень хорошо. Команда может повторно создать файл, добавить ещё одну строку в конфигурацию, перезапустить сервис или вообще привести систему в непредсказуемое состояние. В Ansible подход немного другой. Одна из главных идей инструмента — идемпотентность. Проще говоря: Если сервер уже находится в нужном состоянии, повторный запуск playbook не должен ничего ломать и по возможности не должен ничего изменять...
infra_notes
group_vars и host_vars: как не перепутать настройки серверов в Ansible
Ansible становится особенно интересным, когда серверов становится больше одного. Пока у нас есть условный web01, всё просто. Но представим: web01 web02 web03 db01 db02 А теперь добавим окружения: development staging production И вот здесь появляется проблема. У production свои параметры. У staging — другие. А development вообще может работать с совершенно другими настройками. Как объяснить Ansible, какие переменные использовать для конкретного сервера? Для этого существуют group_vars и host_vars...
Jinja2 в Ansible: как генерировать конфигурацию вместо копирования файлов
До этого мы рассмотрели переменные и роли. Но представим реальную ситуацию. У нас есть несколько Linux-серверов, на каждом работает Nginx. Конфигурация похожая, но не полностью одинаковая. На одном сервере приложение слушает порт 8080, на другом 8081. На одном нужен один домен, на другом — другой. Можно создать отдельный конфигурационный файл для каждого сервера. Но тогда мы снова приходим к копированию. А копирование — один из первых признаков того, что автоматизацию можно сделать лучше. Ansible использует шаблонизатор Jinja2...
Переменные в Ansible: как перестать копировать один и тот же playbook
После первых playbook многие администраторы совершают одну и ту же ошибку. Нужно установить Nginx на тестовый сервер — создаётся один playbook. Нужно сделать то же самое на боевом сервере — копируется тот же playbook и меняется несколько строк. Через месяц таких файлов становится десять. Через полгода уже никто не понимает, какой из них актуальный. Хотя проблема решается гораздо проще. Представим, что нужно создать пользователя. Самый простой вариант выглядит так: - name: Create user user: name: admin state: present Работает? Да...
Первый playbook в Ansible: автоматизируем настройку Linux-сервера
Когда впервые открываешь playbook Ansible, он может показаться сложным. YAML, какие-то tasks, hosts, become… Но на самом деле идея очень простая. Playbook — это обычное описание действий, которые Ansible должен выполнить на сервере. После установки нового Linux-сервера администратор почти всегда делает одно и то же: На одном сервере это занимает несколько минут. На десяти — уже начинает раздражать. На пятидесяти становится настоящей рутиной. Именно такие задачи идеально подходят для автоматизации...
