
Цель урока: Перейти от одноразовых ad-hoc команд к созданию многоразовых, структурированных сценариев автоматизации. Мы изучим базовый синтаксис YAML, напишем наш первый, идемпотентный плейбук для установки веб-сервера Nginx и научимся его запускать.
Часть 1: Теория. Что такое Playbook и YAML?
Playbook (Плейбук, "книга сценариев") - это сердце Ansible. Это текстовый файл, написанный на языке YAML, в котором вы декларативно описываете желаемое состояние вашего сервера или группы серверов.
-
Плейбук состоит из одной или нескольких "пьес" (plays).
-
Каждая "пьеса" применяется к определенной группе хостов.
-
Каждая "пьеса" состоит из набора "задач" (tasks).
-
Каждая "задача" - это вызов одного модуля Ansible (например, apt или service).
Что такое YAML (YAML Ain't Markup Language)?
Это очень простой и человекочитаемый формат для структурирования данных. Забудьте о сложных скобках и запятых. В YAML главное - это отступы (пробелы).
Два главных правила YAML:
-
Списки (массивы) начинаются с дефиса и пробела (-).
- яблоко - апельсин - банан -
Словари (пары ключ-значение) записываются как ключ: значение.
имя: Иван возраст: 30 -
Структура создается отступами. Два пробела - это стандарт.
--- - name: Установить веб-сервер hosts: webservers tasks: - name: Установить пакет Nginx apt: name: nginx state: presentЗдесь hosts и tasks находятся на одном уровне вложенности под name. А apt и его параметры - на следующем уровне под name: Установить пакет Nginx.
Часть 2: Практика. Наш первый идемпотентный плейбук
Давайте напишем плейбук, который устанавливает и запускает Nginx, и при этом будет "чисто" идемпотентным.
Шаг 1: Подготовка. Убедимся, что Nginx удален
Чтобы увидеть магию Ansible в действии, сначала полностью удалим Nginx.
apt purge -y nginx nginx-common
apt autoremove -y
Шаг 2: Создание файла плейбука
Перейдем в наш рабочий каталог ansible_projects и создадим файл.
cd ~/ansible_projects
nano install_nginx.yml
Шаг 3: Написание плейбука
Вставьте в редактор nano следующий код. Будьте очень внимательны к отступам!
---
- name: Play 1 - Настройка веб-сервера
hosts: webservers
become: true
tasks:
- name: Task 1 - Обновить кэш apt (только если он устарел)
apt:
update_cache: yes
cache_valid_time: 3600
- name: Task 2 - Убедиться, что пакет Nginx установлен
apt:
name: nginx
state: present
- name: Task 3 - Убедиться, что служба Nginx запущена и в автозагрузке
service:
name: nginx
state: started
enabled: yes
Разбор каждой строки:
-
---: Начало YAML-документа.
-
- name: ...: Имя нашей "пьесы".
-
hosts: webservers: Применить к группе webservers из нашего inventory.
-
become: true: Выполнять задачи с правами sudo.
-
tasks:: Начало списка задач.
-
apt: ...: Вызов модуля apt.
-
update_cache: yes: Говорит модулю выполнить apt update.
-
cache_valid_time: 3600: Ключевое улучшение! Эта опция говорит Ansible: "Выполняй apt update (и считай задачу измененной), только если локальный кэш пакетов старше 3600 секунд (1 часа)". Если вы запустите плейбук снова в течение часа, эта задача будет пропущена (статус ok).
-
state: present: Декларативное состояние "должен присутствовать".
-
service: ...: Вызов модуля service.
-
state: started: Состояние "должна быть запущена".
-
enabled: yes: "Должна быть включена в автозагрузку".
Сохраните файл (Ctrl+O, Enter) и выйдите (Ctrl+X).
Часть 3: Практика. Запуск плейбука и проверка идемпотентности
Для запуска плейбуков используется команда ansible-playbook.
Шаг 1: Боевой запуск
ansible-playbook install_nginx.yml
Наблюдайте за выводом!
-
PLAY [Настройка веб-сервера]
-
TASK [Gathering Facts]
-
TASK [Task 1 - Обновить кэш apt ...] -> changed (желтый)
-
TASK [Task 2 - Убедиться, что пакет Nginx установлен] -> changed
-
TASK [Task 3 - Убедиться, что служба Nginx запущена ...] -> changed
-
PLAY RECAP: localhost : ok=4, changed=3, ...
Шаг 2: Проверка истинной идемпотентности
Немедленно запустите тот же самый плейбук еще раз.
ansible-playbook install_nginx.yml
Смотрите на вывод! Теперь все задачи будут иметь статус ok (зеленый цвет).
-
TASK [Task 1 - Обновить кэш apt ...] -> ok (зеленый), потому что кэш еще не устарел.
-
TASK [Task 2 - Убедиться, что пакет Nginx установлен] -> ok, потому что пакет уже стоит.
-
TASK [Task 3 - Убедиться, что служба Nginx запущена ...] -> ok, потому что служба уже запущена.
-
PLAY RECAP: localhost : ok=4, changed=0,...

Вот это и есть чистая идемпотентность. Плейбук привел систему в желаемое состояние и при повторных запусках лишь подтверждает, что состояние правильное, не внося лишних изменений.
Шаг 3: Финальная проверка
Проверьте статус службы, как мы делали это раньше:
systemctl status nginx
Вы увидите, что Nginx установлен и работает.
Часть 4: Заключение
Поздравляю! Вы написали и выполнили свой первый, по-настоящему идемпотентный плейбук. Это огромный шаг от ручного администрирования к "Инфраструктуре как Код".
Вы научились:
-
Читать и писать базовый YAML, помня о важности отступов.
-
Использовать ключевые модули (apt, service) для описания желаемого состояния.
-
Применять become: true для повышения привилегий.
-
Запускать плейбуки с помощью ansible-playbook.
-
Достигать "чистой" идемпотентности с помощью cache_valid_time, чтобы повторные запуски не создавали лишнего "шума".
На следующем, 59-м уроке, мы сделаем наши плейбуки еще более гибкими. Мы изучим, как использовать переменные для хранения данных (например, имен пакетов) и шаблоны для создания конфигурационных файлов "на лету".
Перейти к просмотру - УРОК №59.
Промо-код: PROMO15 - скидка 15%!
Введите при оформлении первого заказа на сайте: Hosting-VDS.com

