Выделите текст, нажмите ctrl + enter и отправьте его нам. В течение нескольких дней мы исправим ошибку или улучшим формулировку.
Загляните в раздел «Обсуждение»:
Одним из основных понятий в Ansible является плейбук. Это просто YAML-файл, в котором мы указываем, какие задачи и на каких серверах будут выполняться. Пример такого файла playbook.yml (в комментариях указаны эквивалентные команды на bash):
- hosts: webservers
tasks:
- name: install redis server
apt: name=redis-server state=presents update_cache=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_cache=yes
— выполняет команду apt-get update
для того, что бы обновить индексы.Во второй задаче обновлять индекс не требуется. Достаточно указать состояние state=absent
, чтобы Ansible просто удалил redis-сервер.
Для запуска плейбука используется команда ansible-playbook
, которой мы передаем путь к файлу playbook.yml
и указываем inventory-файл:
$ ansible-playbook playbook.yml -i production.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
С помощью этого ограничения контролируется то, как выглядят плэйбуки, и гарантируется, что задача выполняет только одно действие.
Вам ответят команда поддержки Хекслета или другие студенты.
Профессиональная подписка откроет полный доступ ко всем курсам, упражнениям и урокам Хекслета, проектам и пожизненный доступ к теории пройденных уроков. Подписку можно отменить в любой момент.
или войти в аккаунт
Курсы программирования для новичков и опытных разработчиков. Начните обучение бесплатно.
Наши выпускники работают в компаниях:
Зарегистрируйтесь или войдите в свой аккаунт