Python & Linux: Почему навык змееуста для админа — это мастхев. История о личном опыте
Это небольшая история о том, как лично мне помог всего лишь один инструмент в выходе на совершенно новый уровень, как специалиста.
Мотивация для развития
Наверное, многие из нас на парах мотивации садились читать какую-то книгу по интересной технологии, но ввиду отсутствия четкого понимания, зачем это понадобится забрасывали это дело. Да и зачастую техническая литература бывает жутко скучной. Эти два пункта в комбинации окончательно уничтожают желание изучать технологию.
Я не исключение, и первая попытка не увенчалась успехом.
На тот момент я уже работал полтора года дежурным linux админом, умел писать скрипты на Bash, в организации шел активный переход с оркестратора Puppet на Ansible.
В процессе перехода мне также перепадали тикеты на написание новых ролей. Здесь я почувствовал нехватку базового понимания программирования и знания основ Python.
Дальше появляется задача достаточно серьезного уровня - написать скрипт, для выгрузки и парсинга большого массива данных для автогенерируемого дашборда в Grafana. Он был написан на Bash-е, размером в ~350 строк. Выглядел он ужасно. Как его будет поддерживать другой специалист - непонятно. Мне было стыдно, но оно работало и помогало бизнесу.
Итак, я получил мотивацию.
Изучение Python
Мои глаза горели, руки не понимали, что делать, в книгах большое количество информации, а я хочу писать здесь и сейчас. Хочу показать всем, что мне не зря платят деньги.
Изучение началось с того, что я купил курс по Python: Basic за 5 000 рублей. Он состоял из следующих тем:
Типы данных;
Ветвление;
Циклы;
Работа с файлами;
Модули и библиотеки;
ООП;
Исключения и немного инфы о работе с RESTful API.
Да, все темы были сжаты в рамках курса, но это была моя личная точка старта. Этой инфы за пять тысяч рублей мне хватило для того, чтобы научиться писать красивые скрипты и начать изучать программирование в стиле ООП. До этого я умел только в линейное программирование на уровне Bash скриптов.
Эта точка старта открыла огромное количество дверей. Я научился писать: модули для Ansible, большие скрипты для автоматизации действий завязанных с API интерфейсами, полезные AWS Lambda функции, которые помогают защищать наши проекты от DDoS атак, небольших чат ботов и все в таком духе.
Одна лишь мысль о том, что с помощью Python я могу "фактически всё", зажигала моё желание сделать что-то ещё. Я читал скрипты наших DevOps инженеров, просил их же о ревью кода, спрашивал очень много всего, что связано с питоном (казалось, что я уже всех достал), учился применять практики ООП, открыл для себя портал Codewars. Кстати, благодаря Codewars узнал достаточное большое методов для парсинга массивов данных и различных функций, всем рекомендую.
Ansible перестал для меня быть непонятной штукой, которую нужно 24\7 штудировать по документации, а фильтры jinja2 стали моим лучшим другом.
Ранее мой код выглядел так, словно его писали индусы за еду. Примера ради, вырезка кода, который получает id последнего полученного письма и удаляет его.
Python код за еду
mail = imaplib.IMAP4_SSL('imap.gmail.com')
mail.login('mail@gmail.com', 'Psw')
mail.select("inbox")
result, data = mail.search(None, "ALL")
ids = data[0]
id_list = ids.split()
latest_email_id = id_list[-1]
result, data = mail.fetch(latest_email_id, "(RFC822)")
raw_email = data[0][1]
raw_email_string = raw_email.decode('utf-8')
email_message = email.message_from_string(raw_email_string)
mail.store(latest_email_id, '+FLAGS', '\\Deleted')
mail.expunge()
Для примера вырезка из кода последних скриптов. Он генерирует список каких-то нужных данных из ответа на запрос к Elasticsearch и умеет писать prometheus like метрики в случае проблем:
Python код за еду и деньги
def comparison(targets, field, target):
req_result = req(field=field, target=target)
if req_result.status_code == 200:
try:
elc_json = req_result.json()['some']['key']['from_dict']
for item in elc_json:
elastic_hosts.append(item["key"])
res = [x for x in targets if x not in elastic_hosts]
for name in res:
write_metric(hostname=name)
except:
write_metric(error_msg="Message", code=3)
move_file()
exit(1)
else:
write_metric(error_msg="Error message", code=4)
move_file()
exit(1)
elastic_hosts.clear()
Все и без меня знают, но стоит еще раз упомянуть, что этот язык программирования обладает огромным количеством библиотек и может пригодиться буквально где угодно. Множество крупных проектов имеют готовые библиотеки для работы с их API.
Используешь Amazon? Вот тебе boto3. Используешь Cloudflare? Вот тебе библиотека cloudflare. Используешь Hetzner? Вот тебе hcloud.
Простой синтаксис дает возможность легко читать код и поддерживать его.
Возможность автоматизировать рутинные процессы - это отдельный вид блаженства.
Что мне это дало?
Во-первых, у меня появилось новое хобби, я по сей день изучаю Python, хоть и моих нынешних навыков хватает с головой для выполнения поставленных задач.
Во-вторых, расширился спектр задач, которые я могу брать и выполнять. Автоматизация процессов, улучшение инфраструктуры, так как в современном мире любая организация стремится к модели Infrastructure as a Code.
В-третьих, программирование(не только на Python) - это прямой путь к DevOps практикам и методологии в целом.
В-четвертых, каждое self-review позволяет без особого труда обозначить твою значимость, как постоянно развивающегося высококвалифицированного специалиста. Это позволило мне хорошо пройти предыдущее ревью и получить небольшое повышение в должности.
Собеседования
Если открыть hh.ru, запросить вакансии "Системный администратор Linux"(middle), в навыки которого обычно не входят K8s, CI/CD, обязательные навыки программирования, Docker swarm и тому подобные вещи, вилка ЗП обычно от 110 000 до 150 000. Возьмем в расчет так же то, что на 150 можно выйти, если хорошо пройти собеседование.
Каждый раз, когда я пишу self-review, я параллельно прохожу собеседования. Это нужно исключительно для моих тараканов в голове, чтобы доказать, что я заслуженно прошу повышение зарплаты и рынок мне может предложить столько же.
В этом году моя схема работала также, ревью + собеседования. Но каково же было мое удивление, когда я проходил некоторые собеседования, мягко говоря посредственно, но исключительно из-за умения писать на Python некоторые работодатели предлагали перейти на ЗП выше 150к плюс обучение. Впервые в жизни я из 10 пройденных собеседований получил 3 крайне привлекательных письменных оффера.
Итоги
Основываясь на полученном опыте я могу с уверенностью сказать, что стоит найти свою мотивацию и постоянно развиваться, это не только хорошо оплачивается, но и очень интересно.
Одним лишь инструментом можно расширить свои умения и востребованность на рынке до серьезного уровня.
Сильным и красивым инженером я ещё не стал, но у меня всё впереди. Я верю в себя и своё желание учить что-то новое. Спасибо за уделенное время, надеюсь история о моём опыте кому-то пригодится.
P.S. На самом деле, Python можно заменить и другим языком. Например, Go. Но про это я уже смогу написать статью только тогда, когда буду знать, о чем я пишу ¯\_(ツ)_/¯