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

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

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

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

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

Ad-Hoc

Начать работать с Ansible очень просто. Для этого нужно запустить программу в режиме ad-hoc, то есть выполнить команду на удаленном сервере из командной строки. Попробуем это сделать и разберём, что здесь происходит:

$ ansible all -i production.ini -m ping

При выполнении этой команды мы получим 2 ответа:

ec2-3-17-186-111.us-east-2.compute.amazonaws.com | SUCCESS => {
    "changed": false,
    "ping": "pong"
}
ec2-3-15-41-227.us-east-2.compute.amazonaws.com | SUCCESS => {
    "changed": false,
    "ping": "pong"
}

Тело каждого ответа содержит:

  • имя сервера (видно, что было задействовано 2 сервера)
  • ответ (успешный или неуспешный)
  • информация об изменениях на сервере
  • вывод команды, которую мы выполнили

Можно просмотреть структуру запроса, который был выполнен:

$ ansible --help

usage: ansible [-h] [--version] [-v] [-b] [--become-method BECOME_METHOD] [--become-user BECOME_USER] [-K] [-i INVENTORY] [--list-hosts] [-l SUBSET] [-P POLL_INTERVAL] [-B SECONDS] [-o] [-t TREE] [-k] [--private-key PRIVATE_KEY_FILE] [-u REMOTE_USER] [-c CONNECTION] [-T TIMEOUT] [--ssh-common-args SSH_COMMON_ARGS] [--sftp-extra-args SFTP_EXTRA_ARGS] [--scp-extra-args SCP_EXTRA_ARGS] [--ssh-extra-args SSH_EXTRA_ARGS] [-C] [--syntax-check] [-D] [-e EXTRA_VARS] [--vault-id VAULT_IDS] [--ask-vault-pass | --vault-password-file VAULT_PASSWORD_FILES] [-f FORKS] [-M MODULE_PATH] [--playbook-dir BASEDIR] [-a MODULE_ARGS] [-m MODULE_NAME]
pattern

Обязательный аргумент pattern связан с inventory-файлом, о котором мы поговорим ниже, и указывает, какой хост или хосты нужно задействовать. Далее идет длинный список необязатлельных аргументов. Рассмотрим некотрые из них:

  • [-i INVENTORY] - inventory-файл, в котором содержится список наших серверов
  • [-m MODULE_NAME] - модуль - основная единица Ansible, которая отвечает за выполнение какой-то команды на удаленном сервере (подробнее рассмотрим модули в других уроках)
  • [-a MODULE_ARGS] - аргумент или список аргументов, которые принимает модуль, с которым мы работаем

В примере выполняется запрос и запускается модуль ping на всех серверах, которые указаны в файле production.ini.

Модуль ping очень простой. Он не принимает никаких аргументов и проверяет доступность сервера, можно ли зайти на него по SSH. Выполним эту команду повторно, но укажем уже другой модуль command, который позволяет выполнить произвольную команду на удаленном сервере, и посмотрим, что нам выдаст утилита uptime:

$ ansible all -i production.ini -m command -a 'uptime'
ec2-3-17-186-111.us-east-2.compute.amazonaws.com | CHANGED | rc=0 >>
 5:19  up 7 days,  7:03, 2 users, load averages: 1.10 1.17 1.17
ec2-3-15-41-227.us-east-2.compute.amazonaws.com | CHANGED | rc=0 >>
 5:19  up 7 days,  7:03, 2 users, load averages: 1.10 1.17 1.17

Ansible сообщает нам, что оба сервера были запущены 7 дней назад. Вообще, модуль command используется по дефолту. И если указать только аргументы, то будет использоваться именно этот модуль.

Теперь давайте посмотрим, что собой представляет inventory-файл. В простейшем случае — это список серверов. Его можно получить с помощью команды опции --list-hosts:

$ ansible all --list-hosts -i production.ini
  hosts (2):
    ec2-3-17-186-111.us-east-2.compute.amazonaws.com
    ec2-3-15-41-227.us-east-2.compute.amazonaws.com

all — зарезервированное ключевое слово в Ansible. Оно обозначает, что команду нужно выполнить для всех серверов, указанных в inventory-файле. Но можно настроить списки серверов, на которых будут запускаться сценарии. Например, выделить различные группы — веб-сервера, application-сервера и т.д.:

[webservers]
ec2-3-17-186-111.us-east-2.compute.amazonaws.com
[appservers]
ec2-3-15-41-227.us-east-2.compute.amazonaws.com

Если обратиться к несуществующей группе, Ansible сообщит о том, что он не нешёл ни одного хоста:

$ ansible devservers -i production.ini -a 'uptime'
[WARNING]: No hosts matched, nothing to do

А при указании webservers, команда uptime будет выполнена только на сервере из этой группы:

$ ansible webservers -i production.ini -a 'uptime'
ec2-3-17-186-111.us-east-2.compute.amazonaws.com | CHANGED | rc=0 >>
 4:49  up 7 days,  6:32, 2 users, load averages: 1.12 1.25 1.29

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

  1. Документация по ad-hoc

<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

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

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

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