Привет, %username%! В том или ином виде часто сталкиваюсь с таким вопросом:

Вот я слышал, что вам в DevOps/SRE надо программировать! Я вот хочу, но не вижу у себя на работе задач, где можно программировать. А если и вижу, то мне не дают их.

Причем это не только для Golang, но и для Python тоже релевантно.

Короче, у тебя есть два стула варианта – “сменить профиль деятельности на разработчика” или “начать автоматизировать свою работу по максимуму”. Первый вариант я рассматривать не хочу, потому что он максимально очевидный и простой – ты потеряешь в доходе, будешь всему учиться с абсолютного нуля, будешь много страдать и до “интересных” задач доберешься крайне не скоро (что бы какие-либо курсы не обещали). Поэтому пройдемся кратко по второму пути.

Что можно автоматизировать? Да абсолютно все! Вот прям буквально все – надо разложить файлики, поменять данные в БД, нарисовать файл лицензии или ридми для репозитория – все это можно автоматизировать. Начнем с того, что ты наверняка читал или слышал про книгу “Проект Феникс”. Если ее еще разик перечитать, то можно внезапно узнать о том, что автоматизации подлежат следующие два важных пункта (их чуть больше, но именно эти нас интересуют сейчас):

  • Рутина – одинаковые, часто повторяющиеся задачи, которых достаточно много;
  • Очень редкие/сложные – задачи, которые выполняются достаточно редко, чтобы успеть забыть все то, что необходимо сделать, либо имеют большое количество неочевидных нюансов, в рамках которых можно случайно аннигилировать вселенную.

Рутина

Тут кажется все максимально очевидно и понятно. Просто смотришь на те задачи, которые чаще всего выполняешь и придумываешь для них автоматизацию. Причем автоматизировать можно на чем угодно и что угодно (да, еще раз повторяю). Создать пользователь в БД – можно пойти десятком разных способов, но тебе никто не запрещает попытаться сделать это через собственную утилиту, которую ты напишешь на любом ЯП. А если это еще и не что-то супер-секретное или узко специализированное под какую-то хрень в рамках компании, то можно еще и в опенсорс выложить! А если ты выложил в опенсорс, то тут и качество кода надо бы подтянуть, и автоматизации разные, и еще мешок всяких штук.

Так же крутинам можно отнести какие-то примитивные штуки в духе “надо сгенерировать временный пароль”. У меня есть заметка “Генерация паролей в CLI”, в которой я приводил мешочек различных способов для того, чтобы сгенерировать пароль в терминале. Некоторыми из вариантов я пользовался достаточно долго до тех пор, пока не решил сойти с ума. Сумасшествие выглядит просто – я написал свою собственную утилиту gch, которая закрывает эту задачу и удобна конкретно мне. Также, мне необходимо бывает использовать определенную лицензию, файл с которой просто так не раздобыть, а бегать по гитхабу крайне лень. Что я сделал? Правильно! Я добавил в свою утилиту gch нужную мне команду, которая решает эту мою личную проблему.

Думаю теперь вектор понятен – просто бери и делай, а не жди от кого-то каких-то задач правильно оформленных.

Редкие/сложные

Тут у нас начинается самое интересное – кишочки! К редким и сложным задачам может быть отнесено все, что угодно: от пары SQL-запросов в БД, до обновления Kubernetes-кластера на железных серверах. Если кубы на железе я не особо люблю (я все таки в облаках живу), то вот истории, когда инженеру моей команды надо выполнить несколько запросов в PostgreSQL, чтобы закрыть очередную редкую задачу – отличный свежий кандидат на автоматизацию.

Итак, пример: задача бывает раз 1-2 недели, в рамках которой надо сделать:

  • Мешочек подготовительной работы;
  • Выполнить SELECT в БД одного сервиса и получить оттуда список строк;
  • Выполнить UPDATE в БД другого сервиса и поменять поле с 0 на 1 для всех строк из первого сервиса;

То, что это выглядит как костыль – это нормально! Решение временное, но к сожалению не на пару дней, поэтому пришлось придумывать решение. Берешь тот ЯП, который тебе интересен (в моем случае это Golang, но можно было бы взять и Rust ради эксперимента). Рисуешь себе задачу в трекере и сразу берешь ее исполнять.

По итогу получаешь вполне себе работоспособное решение, которое:

  • Выполняет конкретную задачу;
  • Минимизирует человеческий фактор;
  • Поддерживает режим dry run по умолчанию;
  • Сводит 15 минут работы инженера к 1 минуте (ну надо ж на бастион еще подключиться по SSH);

А помимо того, что ты встретишь кучу проблем и научишься их решать, пока будешь автоматизировать задачу, ты еще получишь респект от команды (но это не точно).

Итоги

Никаких итогов тут не будет. Просто бери и делай свою собственную сраную жизнь проще и легче прямо сейчас!


Если у тебя есть вопросы, комментарии и/или замечания – заходи в чат, а так же подписывайся на канал.

О способах отблагодарить автора можно почитать на странице “Донаты”. Попасть в закрытый Telegram-чат единомышленников “BearLoga” можно по ссылке на Tribute.