Зарегистрируйтесь для доступа к 15+ бесплатным курсам по программированию с тренажером

Плейбук Основы автоматизации в Ansible

Одним из основных понятий в Ansible является плейбук. Это просто yaml-файл, в котором мы указываем, какие задачи и на каких серверах будут выполняться. Пример такого файла playbook.yml:

# На какой группе серверов
- hosts: webservers

  tasks:
    - name: install redis server
      # apt-get update && apt-get install redis-server
      ansible.builtin.apt: # имя модуля Ansible
        name: redis-server
        state: present
        update_cache: yes

    - name: remove redis server
      # apt-get remove redis-server
      ansible.builtin.apt:
        name: redis-server
        state: absent

В этом плейбуке на группе хостов webservers выполняются две задачи (таски). Первая — это установка redis-server, и вторая — его удаление. Структура любой задачи такая:

  • имя задачи — необязательный параметр, в котором описывается задача. Нужна только для вывода во время выполнения плейбука.
  • модуль и его параметры – определяет команду, которая будет выполнена на указанной группе серверов. В примере выше это модуль apt, который запускает пакетный менеджер apt входящий в стандартную поставку Ubuntu. С его помощью устанавливаются и удаляются программы.

Имя модуля в задачах задается с префиксом ansible.builtin. Ansible позволяет создавать свои модули у которых имена могут совпадать со встроенными модулями. Поэтому разработчики ввели пространства имен, позволяющие избежать неоднозначностей (какой модуль имелся ввиду?).

Каждый модуль принимает параметры. В первой задаче три параметра:

  • name: redis-server — имя пакета.
  • state: present — состояние, в которое требуется привести модуль. Ansible убедится, что этот пакет есть, либо доустановит его.
  • update_cache: yes — выполняет команду apt-get update для того, чтобы обновить информацию о пакетах в индексе. Во второй задаче обновлять индекс не требуется. Достаточно указать состояние state: absent, чтобы Ansible просто удалил redis-сервер.

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

Playbook

Для запуска плейбука используется команда ansible-playbook, которой мы передаем путь к файлу playbook.yml и указываем inventory-файл:

# В отличие от ad-hoc режима, группа хостов указывается внутри плейбука
ansible-playbook playbook.yml -i inventory.ini

При запуске этой команды первая же задача упадёт с ошибкой Failed to lock apt for exclusive operation. Из этой ошибки следует, что команда выполняется без прав администратора и не может выполнить установку программ. Чтобы это изменить, можно заходить на сервер под root, что очень часто неприемлемо, и так лучше не делать. Поэтому в Ansible существует механизм переключения пользователя уже внутри. Он называется become. В простейшем случае достаточно прописать become: yes в нужные задачи:

- hosts: webservers

  tasks:
    - name: install redis server
      ansible.builtin.apt:
        name: redis-server
        state: present
        update_cache: yes
      become: yes # <---

    - name: remove redis server
      ansible.builtin.apt:
        name: redis-server
        state: absent
      become: yes # <---

По умолчанию become использует sudo и переключает в root, поэтому у вашего пользователя должны быть необходимые права. Если понадобится другой пользователь, то его можно указать в параметре become_user. Естественно необходимо чтобы у вашего пользователя было sudo. Теперь задача отрабатывает. Обновление индекса и установка занимает некоторое время:

TASK [install redis server] *********************************
changed: [157.230.82.133]

TASK [remove redis server] **********************************
changed: [157.230.82.133]

В терминале вывод станет жёлтым, это обозначает что задачи успешно выполнились. redis-server был установлен и удален с сервера. Если redis-server окажется установлен, то повторной установки не произойдёт. Ansible убедится, что state: present, и перейдёт к следующей задаче.


Самостоятельная работа

  1. Создайте плейбук, в котором опишите установку git для удалённых серверов (группа webservers)
  2. Выполните его, зайдите по ssh на один из серверов и убедитесь в том, что git был установлен
  git --version
  git version 2.32.0
  1. Создайте отдельный плейбук, в котором удалите git. Убедитесь, что Git удалён
  git --version
  Command 'git' not found, but can be installed with:
  apt install git
  1. Выполните его два раза и посмотрите что произойдет во второй раз. Вспомните понятие идемпотентности
  2. Залейте изменения на Github

Дополнительные материалы

  1. Документация Ansible
  2. Список модулей Ansible

Аватары экспертов Хекслета

Остались вопросы? Задайте их в разделе «Обсуждение»

Вам ответят команда поддержки Хекслета или другие студенты.

Ошибки, сложный материал, вопросы >
Нашли опечатку или неточность?

Выделите текст, нажмите ctrl + enter и отправьте его нам. В течение нескольких дней мы исправим ошибку или улучшим формулировку.

Что-то не получается или материал кажется сложным?

Загляните в раздел «Обсуждение»:

  • задайте вопрос. Вы быстрее справитесь с трудностями и прокачаете навык постановки правильных вопросов, что пригодится и в учёбе, и в работе программистом;
  • расскажите о своих впечатлениях. Если курс слишком сложный, подробный отзыв поможет нам сделать его лучше;
  • изучите вопросы других учеников и ответы на них. Это база знаний, которой можно и нужно пользоваться.

Об обучении на Хекслете

Для полного доступа к курсу нужен базовый план

Базовый план откроет полный доступ ко всем курсам, упражнениям и урокам Хекслета, проектам и пожизненный доступ к теории пройденных уроков. Подписку можно отменить в любой момент.

Получить доступ
900
упражнений
2000+
часов теории
3200
тестов

Открыть доступ

Курсы программирования для новичков и опытных разработчиков. Начните обучение бесплатно.

  • 130 курсов, 2000+ часов теории
  • 900 практических заданий в браузере
  • 360 000 студентов
Даю согласие на обработку персональных данных, соглашаюсь с «Политикой конфиденциальности» и «Условиями оказания услуг»

Наши выпускники работают в компаниях:

Логотип компании Альфа Банк
Логотип компании Aviasales
Логотип компании Yandex
Логотип компании Tinkoff

Используйте Хекслет по максимуму!

  • Задавайте вопросы по уроку
  • Проверяйте знания в квизах
  • Проходите практику прямо в браузере
  • Отслеживайте свой прогресс

Зарегистрируйтесь или войдите в свой аккаунт

Даю согласие на обработку персональных данных, соглашаюсь с «Политикой конфиденциальности» и «Условиями оказания услуг»