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

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

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

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

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

Плейбук

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

- hosts: webservers
  tasks:
    - name: install redis server
      apt: name=redis-server state=presents update_cash=yes
      # apt-get update && apt-get install redis-server

    - name: remove redis server
      apt: name=redis-server state=absent
      # apt-get remove redis-server

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

  • имя задачи — это просто произвольная строчка, используется для удобного дебага и понимания, что происходит
  • модуль и параметры — в данном случае используется модуль apt, потому что целевые системы, на которых мы выполняем примеры, это Ubuntu.

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

  • name=redis-server — имя пакета.
  • state=presents — состояние, в которое требуется привести модуль. Ansible убедится, что этот пакет есть, либо доустановит его.
  • update_cash=yes — выполняет команду apt-get update для того, что бы обновить индексы.

Во второй задаче обновлять индекс не требуется. Достаточно указать состояние state=absent, чтобы Ansible просто удалил redis-сервер.

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

$ ansible-playbook playbook.yml -i produtcion.ini

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

- hosts: webservers
  tasks:
    - name: install redis server
      apt: name=nginx state=present update_cache=yes
      become: yes

    - name: remove redis server
      apt: name=nginx state=absent
      become: yes

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

TASK [install redis server] *********************************
changed: [ec2-18-216-178-214.us-east-2.compute.amazonaws.com]

TASK [remove redis server] **********************************
changed: [ec2-18-216-178-214.us-east-2.compute.amazonaws.com]

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

Важно отметить, что одна задача — это обязательно один модуль. Нельзя написать вот так:

- hosts: webservers
  task:
    - name: install and remove redis server
      apt: name=redis-server state=present update_cache=yes
      apt: name=redis-server state=absent
      become: yes

С помощью этого ограничения контролируется то, как выглядят плэйбуки, и гарантируется, что задача выполняет только одно действие.


<span class="translation_missing" title="translation missing: ru.web.courses.lessons.mentors.mentor_avatars">Mentor Avatars</span>

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

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

Для полного доступа к курсу, нужна профессиональная подписка

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

Получить доступ
115
курсов
892
упражнения
2241
час теории
3196
тестов

Зарегистрироваться

или войти в аккаунт

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

  • 115 курсов, 2000+ часов теории
  • 800 практических заданий в браузере
  • 250 000 студентов

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

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

Логотип компании Альфа Банк
Логотип компании Rambler
Логотип компании Bookmate
Логотип компании Botmother

Есть вопрос или хотите участвовать в обсуждении?

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

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