Все статьи | Блог студента

Ansible: автоматизация для студентов Хекслета

Эта статья написана нашим студентом. Мнение пользователей иногда может не совпадать с точкой зрения Хекслета
Ansible: автоматизация для студентов Хекслета главное изображение

Вначале было Слово… Нет, эта история началась несколько позже, поэтому слово было другое. И даже не одно. Сначала – Хекслет, программирование, JavaScript, затем страшное слово «проект». Вообще говоря, как и многое в жизни, звучало оно страшнее, чем оказалось на деле. Но сейчас я не об этом.

Для проектов пришлось настраивать окружение. Это не столько сложно, сколько муторно. В первом проекте часть настройки происходила по инструкции «сделай так», были и озарения, когда всё начинало работать. Затем были снова курсы и второй проект. Вспомнить всё о настройке было нереально, поэтому алгоритм действий был такой: залезть в описание и шаги первого проекта, сделать «как там», проверить, правильно ли всё сделал, продолжить настройку, затем только перейти к, собственно, второму проекту.

На третьем проекте я уже выла и плевалась, тратя полтора дня всё на те же шаги по настройке, и мечтала настроить автоматическое развёртывание для проектов Хекслета и своих собственных. Тогда и подумала впервые о том, что есть отличная возможность одновременно упростить себе жизнь и изучить полезный в дальнейшей жизни инструмент — посмотреть в сторону Ansible.

А дальше начались стандартные метания новичка — и хочется, и колется. И с английским у меня, вроде бы, неплохо — статьи читаю, TED-ролики смотрю (хоть и не всегда всё понимаю), но даже мысль «посмотреть документацию на английском» пугает неимоверно, особенно, если новый инструмент с незнакомым поведением (и, тем более, настройкой!). Поэтому пытаешься гуглить статьи типа «ansible с нуля».

И тут ждёт огромное разочарование — все подобные статьи рассчитаны на настройку Ansible для разворачивания чего бы то ни было на удалённых серверах. Но мой-то случай гораздо проще! И если в некоторых статьях хотя бы во введении говорится, что Ansible можно использовать для автоматизации чего угодно, начиная с разворачивания окружения для локальной разработки до настройки серверов с разделением на дев, прод и всё, что вам нужно, в остальных настолько простые случаи даже не упоминаются.

Мой муж (сеньор девопс инженер), узнав, для чего я хочу использовать Ansible, сказал: «Никто не использует автоматизацию для организации локальных проектов! Там же нечего автоматизировать: ты ставишь модуль, пробуешь, сносишь, ставишь другой». Возможно, даже вероятно, у «серьёзных» программистов всё именно так и обстоит. Но у нас, студентов Хекслета, ситуация всё же другая. Я что-то узнала на первом проекте, то же самое использую на втором, третьем (да, там больше модулей, но базовые-то всё равно так же используются!) и даже на пет-проектах, хотя бы потому, что мой кругозор как программиста ещё достаточно мал и я не могу легко заменить один инструмент другим либо потому, что даже не знаю о его существовании, либо потому, что с первым я уже хоть немного знакома, а второй для меня ещё совсем тёмный лес.

Итак, Ansible. Желание его всё же освоить и использовать перевесило всё остальное, тем более, для такой простой автоматизации, действительно, нужно узнать о нём совсем элементарные вещи. Но чтение документации на английском у меня пока всё же идёт по принципу «узнать, что делает конкретный модуль». Я, конечно, посмотрела оригинальный видеоролик «знакомство с Ansible», но статьи гуглила всё же на русском языке. Большая часть из них рассказывает сразу о ролях, но они вам пока не понадобятся. И все статьи начинались с указания тестовых удалённых серверов.

Первой сложностью оказалось нагуглить, как заставить Ansible делать то, что нужно, локально, никуда не лазая по ssh. В итоге, я нашла одну статью, в которой рассказывалось, как указать localhost в inventory-файле, и даже эту статью не удалось прочитать целиком, — сайт попросил купить доступ для продолжения чтения. Но то, что мне было важно, я уже узнала. Полагаю, найти нужную информацию в «родной» документации Ansible было бы проще, но тогда я ещё боялась этой документации, ну и, как обычно, студенты лёгких путей не ищут.

Дальше я уткнулась в то, что по дефолтному пути у меня папки Ansible не оказалось, и я не знала, куда разместить файл hosts, чтобы мой Ansible его увидел. Опять же, как новичок, не разбирающийся в терминологии и предметной области, я ещё не знала, что inventory-file и hosts – это одно и то же. Оказалось, мой муж никогда не использует дефолтную папку и все inventory-файлы кладёт локально (в данном случае: в домашний каталог).

Причём тут мой муж? Так сложилось, что «для жизни» у меня ноут с виндой, а проекты — на стареньком макбуке, а тут вдруг пришлось уехать, оставив макбук дома. Но программировать хочется (и проект очередной, и для себя кое-что), поэтому муж мне настроил линукс на одном из своих серверов. К теме это не относится, но теперь у меня в винде vscode подключается к серверу с линуксом, и я спокойно делаю там всё, что мне нужно.

После ещё получаса гугления я, наконец, разобралась, как подключить мой файл hosts. И оно заработало! Я смогла успешно пропинговать localhost, используя Ansible. Понятно, что это далеко не всё, но уже это была большая победа, как успешно сделанный шаг в проекте 😊

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

И приятным открытием для меня стало, что документация у Ansible проста и понятна. Во всяком случае, когда ты хоть немного представляешь, что тебе нужно сделать. Не надо её бояться. Кстати, имеет смысл смотреть не только описания параметров, но и примеры использования — там иногда можно встретить интересные моменты, которые не описаны выше.

Ещё одно открытие меня ждало, когда читала описание модуля npm: не надо пытаться повторять шаги из проектов том же виде, как мы делаем это вручную. То есть вместо того, чтобы устанавливать необходимые dev-dependencies по одной, гораздо проще сказать Ansible установить их сразу пачкой. Правда, тут для меня ещё остаётся открытым вопрос с версиями.

В конечном итоге, свой первый плейбук я закончила, запустила на исполнение в нужной директории и… ничего не произошло. Вернее, не совсем так. Сначала Ansible несколько раз выдавал ошибки, приходилось что-то исправлять. Но когда он отработал корректно и написал, что всё ок, в директории проекта не появилось ни одного файла. Пришлось разбираться, тестировать, гуглить, всё по-настоящему, как когда не понимаешь, что и где не работает, только заранее написанных тестов нет и console.log не вставишь.

Оказалось, что Ansible не совсем корректно обрабатывает относительные пути. Я не знаю, баг это или фича, однако точно не ожидаемое пользователем поведение. Собственно, единственное, что я нашла на эту тему в гугле, – баг-репорт от октября 2018 года, но воз и ныне там. Судя по многочисленным статьям об ansible, все пользуются абсолютными путями, что не вполне подходит в нашей ситуации.

Я, конечно, для себя нашла из этого выход, приходится совершать некие лишние телодвижения (вероятно, их можно автоматизировать, запуская Ansible изнутри плейбука, я не проверяла, но на мой взгляд, это всё же извращение, пока мне не приходится разворачивать десятки проектов в короткие сроки), однако конечным результатом я всё же довольна. Потратила те же полтора дня, чтоб разобраться с ansible, зато теперь всё разворачивается за 5 минут. Как говорится, «лучше день потерять, потом за 5 минут долететь».

Аватар пользователя Vita Chistyakova
Vita Chistyakova 16 апреля 2020
Рекомендуемые программы

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

Иконка программы Фронтенд-разработчик
Профессия
Разработка фронтенд-компонентов веб-приложений
1 декабря 8 месяцев
Иконка программы Python-разработчик
Профессия
Разработка веб-приложений на Django
1 декабря 8 месяцев
Иконка программы PHP-разработчик
Профессия
Разработка веб-приложений на Laravel
1 декабря 8 месяцев
Иконка программы Node.js-разработчик
Профессия
Разработка бэкенд-компонентов веб-приложений
1 декабря 8 месяцев
Иконка программы Верстальщик
Профессия
Вёрстка с использованием последних стандартов CSS
в любое время 5 месяцев
Иконка программы Java-разработчик
Профессия
Разработка приложений на языке Java
1 декабря 10 месяцев
Иконка программы Разработчик на Ruby on Rails
Профессия
Новый
Создает веб-приложения со скоростью света
1 декабря 5 месяцев