Цель урока: Перейти от одноразовых ad-hoc команд к созданию многоразовых, структурированных сценариев автоматизации. Мы изучим базовый синтаксис YAML, напишем наш первый, идемпотентный плейбук для установки веб-сервера Nginx и научимся его запускать.

Часть 1: Теория. Что такое Playbook и YAML?

Playbook (Плейбук, "книга сценариев") - это сердце Ansible. Это текстовый файл, написанный на языке YAML, в котором вы декларативно описываете желаемое состояние вашего сервера или группы серверов.

  • Плейбук состоит из одной или нескольких "пьес" (plays).

  • Каждая "пьеса" применяется к определенной группе хостов.

  • Каждая "пьеса" состоит из набора "задач" (tasks).

  • Каждая "задача" - это вызов одного модуля Ansible (например, apt или service).

Что такое YAML (YAML Ain't Markup Language)?
Это очень простой и человекочитаемый формат для структурирования данных. Забудьте о сложных скобках и запятых. В YAML главное - это отступы (пробелы).

Два главных правила YAML:

  1. Списки (массивы) начинаются с дефиса и пробела (-).

    - яблоко
    - апельсин
    - банан
  2. Словари (пары ключ-значение) записываются как ключ: значение.

    имя: Иван
    возраст: 30
  3. Структура создается отступами. Два пробела - это стандарт.

    ---
    - 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+OEnter) и выйдите (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 RECAPlocalhost : 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 RECAPlocalhost : ok=4, changed=0,...

Вот это и есть чистая идемпотентность. Плейбук привел систему в желаемое состояние и при повторных запусках лишь подтверждает, что состояние правильное, не внося лишних изменений.

Шаг 3: Финальная проверка
Проверьте статус службы, как мы делали это раньше:

systemctl status nginx

Вы увидите, что Nginx установлен и работает.

Часть 4: Заключение

Поздравляю! Вы написали и выполнили свой первый, по-настоящему идемпотентный плейбук. Это огромный шаг от ручного администрирования к "Инфраструктуре как Код".

Вы научились:

  • Читать и писать базовый YAML, помня о важности отступов.

  • Использовать ключевые модули (aptservice) для описания желаемого состояния.

  • Применять become: true для повышения привилегий.

  • Запускать плейбуки с помощью ansible-playbook.

  • Достигать "чистой" идемпотентности с помощью cache_valid_time, чтобы повторные запуски не создавали лишнего "шума".

На следующем, 59-м уроке, мы сделаем наши плейбуки еще более гибкими. Мы изучим, как использовать переменные для хранения данных (например, имен пакетов) и шаблоны для создания конфигурационных файлов "на лету".

Перейти к просмотру - УРОК №59.

подарок Промо-код: PROMO15 - скидка 15%! огонь

Введите при оформлении первого заказа на сайте: Hosting-VDS.com

авторское право цифровые решения

Помог ли вам данный ответ? 0 Пользователи считают это полезным (0 голосов)