Опытом делится Денис Наумов, R&D - архитектор, Слёрм, ISPsystem, ex Grid Dynamics,
а также спикер курса Слёрм "Python для инженеров".
Livestrem в рамках 1-го потока курса "Python для инженеров": пишем оператор Kubernetes на Python. Оказывается это делается комфортно не только на GO! Наш оператор будет подготавливать некоторые тестовые среды.
Livestrem в рамках 1-го потока курса "Python для инженеров": с помощью фреймворка Errbot напишем свой бот для телеграмма, добавляющий доступ к серверу. На примере этого вы поймёте, как написать любое Chatops-приложение на основе Errbot.
11 октября стартует 2-й поток курса по Python для инженеров, созданного специально для DevOps-инженеров и системных администраторов.
В рамках курса: — разбираем админские библиотеки, — пишем операторы и модули, — настраиваем интеграции,
В конце курса каждый студент напишет свой проект и получит код-ревью. Такой проект можно использовать в CV.
Почему OPS'ам нужен питон?
В чем его прелесть?
Для каких задач Python хорошо подходит?
Зачем: научиться понимать логику программ на Python и не только, а так же писать простые программы - важнейшая задача. "Самое то", если вы не знакомы с синтаксисом Python
Типы данных и переменные, мутабельные/иммутабельные и простые/составные типы данных, приемы отладки
Условный оператор - логические операторы, простые условия, вложенные условия и замена оператора switch
Базовые циклы - циклы while и for, итераторы, прерывания циклов
Функции, методы строк, списков и словарей
Генерация и обработка исключений
Практика: набор небольших микрозаданий по каждому уроку
Зачем: Освоим особенности Python - именно за их счет он так прост и практичен. Также раскроем значение тех самых трех букв (мы про ООП) без академической теории и с понятным предназначением.
Продвинутая работа с циклами - оператор yield и генераторы, инсайты о циклах в Python (оператор else в цикле, оптимизации циклов comprehensions, etc.)
Специальные типы структур (frozendict, defaultdict, etc.)
Базовые понятия ООП: классы, экземпляры классов, инкапсуляция, наследование и полиморфизм
Практика: набор небольших микрозаданий по каждому уроку
Продвинутая практика: аудит использования услуг. У CTO появилось подозрение, что некоторые услуги и сервисы уже не используются командами. Проблема заключается в том, что модуль мониторинга используемых услуг не обновлялся последние десять лет: он не может выгрузить агрегированные данные, да и формат возвращаемых значений не соответствует общепринятым стандартам. Вы были избраны, чтобы извлечь снятые показатели, агрегировать их по типу и команде и предоставить данную информацию CTO для первоначальной оценки масштабов проблемы
Зачем: Практически каждый сервис имеет интерфейс для подключения по какому-либо сетевому протоколу. А без подключения невозможно взаимодействие, к счастью в экосистеме Python найдутся модули-клиенты практически для любых протоколов.
Пакет pip и установка сторонних модулей
Модуль Paramiko для выполнения команд по ssh
Модуль requests для выполнения HTTP запросов
Обзор модулей для работы с базами данных и брокерами сообщений
Практика разминочная: Астрологи объявили неделю кодинга на Python. Количество практик выросло вдвое. Вас заметили! Кажется, вы использовали curl, чтобы получать информацию от биллинговой системы. Самое время использовать модуль requests, чтобы выполнить HTTP-запрос внутри вашего приложения. Кстати, модуль мониторинга не умеет собирать данные о лимитах с особых облачных сервисов SBS (Slurm Beautiful Services). Но можно запросить их самостоятельно: по протоколу SSH
Практика со звездочкой. Команда разработки внедряет уже не новую методологию: Допустил возникновение алерта - получи задачу. Аналитическая подсистема ищет только отборные ошибки и складывает сообщения о них в брокер сообщений Kafka. Ваша задача завершить цикл возврата багов разработчикам: ваш консьюмер должен автоматически создавать задачи с нужным описанием и приоритетом в Trello
Зачем: Подключение к сервису - только половина дела. Другая половина это обмен информацией. А информация зачастую представляет собой набор текстовых символов в определенном формате. Раскодировать и закодировать помогут модули. Информация не нужна вся целиком? Извлечь важное, отбросив остальное помогут регулярные выражения.
Модуль re и регулярные выражения
Модули работы с данными в разных форматах: separated values, json, yaml, xml
Использование аргументов командной строки: модуль argparse
Практика: создание источника данных об использовании услуг В ходе аудита использования услуг вы выявили важную для бизнеса информацию, заинтересовался даже CEO. Было принято решение проанализировать потерянные деньги и больше не допускать таких ситуаций. Для этого нужно дать аналитикам инструмент получения данных, чтобы они подготовили отчеты. Проблема заключается в том, что модуль мониторинга возвращает лимиты по услугам по отдельному запросу в форматах yaml, а цены за услуги возвращаются биллинговой системой в формате xml. Необходимо срастить данные о текущей загрузке с лимитами и ценами. Агрегированную информацию отдел аналитики запросил в формате JSON с возможностью указать интервал времени и шаг агрегации
Зачем: Важность взаимодействия с операционной системой не нужно объяснять дополнительно. Как подружить её с Python - в этом уроке.
Чтение и запись файлов.
Модуль os - чтение environment variables, работа с директориями и правами, работа с процессами
Модуль subprocess для интерактивного взаимодействия с процессами
Практика: автоматическое предоставление доступов к серверам В ходе кампании по отказу от неиспользуемых услуг возникла курьезная ситуация: сервер продуктовой команды отключили, но инфраструктурная команда периодически использовала его в качестве хоста для стейджинга. Выяснилось, что продуктовая команда не использовала его потому что периодически кто-то перезаписывал их настройки своими. Было решено, что теперь ресурс будет закрепляться только за членами одной команды, а избежать ошибок поможет автоматика. Вам, как заварившему эту кашу, необходимо написать агент, который будет периодически опрашивать систему управления правами и вносить изменения в конфигурации прав внутри установленных сервисов и по необходимости давать сервисам команду перечитать конфигурации
Зачем: Ansible - мощная система управления конфигурациями, да еще и с возможностью расширения собственными модулями. Какое совпадение, что она сама и большинство модулей написаны на Python.
Написание своих модулей для ansible
Практика: написание модуля управления правами Давным-давно, в далёкой-далёкой галактике вы уже писали агент для выдачи прав к определенным сервисам. Пришло время поменять pull на push и в этом поможет ansible. Все что нужно - лишь модуль
Сейчас выбираем наиболее интересную тему.
Зачем: подготовка кода к деплою - одна из важнейших задач. Сделать этот процесс гибче и удобнее помогают собственные скрипты для stage пайплайнов.
Создание REST API на Flask
Создание своего prometheus exporter с Prometheus Python Client и Flask
Практика: выгрузка данных в стороннюю систему мониторинга. Затраты на неиспользуемое оборудование превысили даже пессимистичные прогнозы. Теперь у команды инженеров есть еще одна зона ответственности - мониторинг неиспользуемых услуг. Для этого вам необходимо периодически опрашивать биллинговую систему через ваш скрипт и передавать данные в Prometheus. Формат получаемых данных все еще не подходит. Вам необходимо реализовать коннектор. А заодно и написать эндпоинт, чтобы отдел аналитики всегда имел под рукой актуальную информацию в формате JSON
Использование сторонних модулей на примере интеграции в пайплайны Gitlab
Использование pygit для получения информации об изменениях в коде
Практика: генерация change log из коммитов Ваши решения настолько понравились команде инженеров, что они вдохновились ими и начали писать свои. Только вот описания к релизам сделать всегда забывают. Для этого командой было принято решение внедрить commit conventions и генерировать ченджлоги прямо из коммитов при слиянии dev-бранча с релизным, а если название коммита не соответствует commit conventions - не допускать merge-request до merge
Сейчас выбираем наиболее интересную тему.
Вы можете автоматизировать свою задачу, а мы обещаем сделать ревью вашего кода. Если идей или задач нет - мы поможем их придумать!