0% acharam este documento útil (0 voto)
27 visualizações62 páginas

Python Moderno20

O e-book 'Python Moderno para DevOps' de Bruno Cesar Rocha oferece um guia prático sobre ferramentas e técnicas atuais para automação e DevOps utilizando Python. O autor, com quase 20 anos de experiência em TI, compartilha insights valiosos e aborda temas como configuração de ambientes, validação de dados e qualidade de código. O objetivo é fornecer um recurso acessível para aprimorar habilidades em automação e DevOps com Python moderno.

Enviado por

Alessandro Dias
Direitos autorais
© © All Rights Reserved
Levamos muito a sério os direitos de conteúdo. Se você suspeita que este conteúdo é seu, reivindique-o aqui.
Formatos disponíveis
Baixe no formato PDF, TXT ou leia on-line no Scribd
0% acharam este documento útil (0 voto)
27 visualizações62 páginas

Python Moderno20

O e-book 'Python Moderno para DevOps' de Bruno Cesar Rocha oferece um guia prático sobre ferramentas e técnicas atuais para automação e DevOps utilizando Python. O autor, com quase 20 anos de experiência em TI, compartilha insights valiosos e aborda temas como configuração de ambientes, validação de dados e qualidade de código. O objetivo é fornecer um recurso acessível para aprimorar habilidades em automação e DevOps com Python moderno.

Enviado por

Alessandro Dias
Direitos autorais
© © All Rights Reserved
Levamos muito a sério os direitos de conteúdo. Se você suspeita que este conteúdo é seu, reivindique-o aqui.
Formatos disponíveis
Baixe no formato PDF, TXT ou leia on-line no Scribd
Você está na página 1/ 62

PREFÁCIO

este e-book, “Python Moderno para


DevOps: Um guia de ferramentas atuais
para resolver problemas práticos em
automação e DevOps,” foi escrito por
Bruno Cesar Rocha, Principal Software
Engineer na Red Hat, acumulando
quase 20 anos de experiência em TI
em papéis como SysAdmin, Engenheiro
de Qualidade, Data Engineer e Arquiteto
de Software. Atualmente morando em
Portugal, trabalha no desenvolvimento do
Ansible. É criador do Dynaconf (biblioteca
Python) e Marmite (Rust). Autor do livro
“Python Web Development Cookbook”.
Com grande paixão pelo ensino atua
como educador na LINUXtips onde
ministra treinamentos de Python, e como
criador do canal CodeShow no YouTube,
compartilhando conhecimento técnico
e é também membro eleito da Python
Software Foundation.

Neste guia, Bruno não apenas apresenta


as ferramentas e técnicas, mas também
oferece insights valiosos baseados
em sua experiência real. O objetivo é
fornecer um recurso prático e acessível
para quem busca aprimorar suas habili-
dades em automação e DevOps com
Python Moderno.

python moderno para DevOps


SUMÁRIO
INTRODUÇÃO
5 Porque Python é uma essencial ferramenta para DevOps
6 Visão geral do ecossistema Python para DevOps
7 O que é o Python Moderno?

CONFIGURANDO O AMBIENTE DE DESENVOLVIMENTO


8 Desafios Comuns na Gestão de Ambientes Python
9 Instalação e gestão de ambientes com UV
10 Ambientes virtuais e isolamento de dependências
11 Podemos simplesmente usar o UV
12 Qualidade de Código

VALIDAÇÃO DE DADOS
14 Anotação gradual de tipos
17 Validação de dados com Pydantic

GERENCIAMENTO DE CONFIGURAÇÕES
20 Dynaconf para gerenciar configurações de forma flexível
23 Exemplos de configurações para diferentes ambientes
24 Usando a CLI da Dynaconf
25 Desenvolvimento de APIs REST com FastAPI
27 Consumindo APIs REST

LINHA DE COMANDO
30 Criação de CLIs

python moderno para DevOps


TESTES E QUALIDADE
35 Testes com pytest
38 Testes de performance com Locust

DEBUGGING EFICIENTE
42 Debugging interativo
46 Debugging remoto

FERRAMENTAS DE PRODUTIVIDADE
49 Tarefas com Taskipy

INTERAÇÃO COM SERVIÇOS EXTERNOS


51 Integração com Git
53 Docker
54 Quer um desafio?
55 Kubernetes

CONCLUSÃO
PRÓXIMOS PASSOS
CONSIDERAÇÕES FINAIS

python moderno para DevOps 4


INTRODUÇÃO
Porque Python é uma
essencial ferramenta para
DevOps
A cultura DevOps, que visa integrar as Dominar Python é, portanto, um investi-
equipes de desenvolvimento e operações, mento estratégico para qualquer profis-
exige muitas ferramentas que facilitem a sional ou equipe que busca otimizar
automação, a colaboração e a eficiência a entrega de software e a eficiência
em todo o ciclo de vida do software. operacional.
Nesse contexto, Python atua como
uma linguagem “cola”, um canivete suíço
de ferramentas prontas para resolver
diversos problemas.

Uma das principais razões para a popula-


ridade de Python em DevOps é a sua
simplicidade e legibilidade. A sintaxe
clara e concisa de Python torna o código
fácil de escrever, entender e manter, o
que é crucial em ambientes de ritmo
acelerado e colaborativos. Equipes de
desenvolvimento e operações podem
trabalhar juntas de forma eficaz quando
a base de código é acessível a todos.
Python é a segunda melhor
Sua vasta biblioteca padrão, rico ecossis- opção para tudo. Há um módulo
tema de terceiros, forte comunidade e para praticamente qualquer
capacidade de automação em diversas coisa, e alguém já enfrentou o
áreas do ciclo de vida do software a mesmo problema antes.”
consolidam como uma das linguagens
fundamentais para a implementação – Bruce Stone,
bem-sucedida de práticas DevOps. Diretor de Engenharia

python moderno para DevOps 5


Visão geral do ecossistema
Python para DevOps
A enorme e vasta coleção de bibliotecas
e ferramentas do ecossistema Python
abrange áreas cruciais para DevOps,
aqui estão alguns exemplos:

infraestrutura como
código (IaC): Ansible, boto3
(AWS), lambda PowerTools,
google-cloud-python (GCP),
Docker-py, kubernetes-client Em resumo, a versatilidade que o Python
oferece permite a automação de diversas
automação de testes: pytest, tarefas e também a criação de soluções
playwright, locust, freezegun personalizadas para DevOps. É possível
integrar as ferramentas e plataformas
integração e entrega e ainda criar vários CLIs e dashboards.
contínua (CI/CD): python- Além das ferramentas específicas para
-jenkins, python-gitlab, PyGithub plataformas DevOps, o profissional de
DevOps também se beneficia de toda a
monitoramento e logging: gama de ferramentas e construções da
logging, pandas, regex, structlog, própria linguagem e biblioteca embutida,
psutil, Clientes Python para permitindo o desenvolvimento e gestão
Prometheus e OTEL de projetos para CLI, TUI, API ou até
mesmo para integração com IA.

83% dos desenvolvedores estão


usando Python para projetos
de DevOps, administração de
sistemas e scripts de automação
— um aumento significativo em
relação aos 35% em 2017.”

– Scott Ferguson,
jornalista da DevOps.

python moderno para DevOps 6


O que é o Python Moderno?
python moderno refere-se à nova Mais recentemente, o “Python Moderno”
forma, design, estrutura e estética das também engloba a implementação de
soluções desenvolvidas com Python a iniciativas de melhoria do Python,
partir da versão 3.7. Essa modernidade se geralmente propostas por meio das PEPs.
caracteriza pelo uso extensivo de Type Essas mudanças significativas otimizam
Annotations, que servem como garantia a experiência vinda do desenvolvimento,
de qualidade fornecendo contexto e tornando a linguagem mais simples e
significado para as aplicações. Essa assertiva. Exemplos dessas iniciativas
abordagem é aplicável na criação de incluem as PEPs para aprimoramento
ferramentas CLI, APIs e na ingestão do sistema de builds e dependências,
de dados externos que necessitam que resultaram em ferramentas como
de validação. Esse movimento trouxe UV e Poetry; otimizações no interpre-
para o Python conceitos como Enum e tador; melhorias na intercomunicação
dataclasses, apoiaram o surgimento de com linguagens externas como Rust e C;
bibliotecas como Pydantic, FastAPI, Typer otimizações de desempenho; e a consoli-
e FastMCP e também de ferramentas dação de Python como uma plataforma
como Ruff e UV. robusta para agentes de IA.

A introdução das anotações de tipos


no Python transformou a linguagem
de uma ferramenta de script ágil
para uma plataforma robusta de
desenvolvimento de software. Essa
evolução não apenas aprimorou a
legibilidade e a manutenção do código,
mas também elevou a confiança dos
desenvolvedores em projetos de
larga escala.”

— Dra. Camila Andrade,


Engenheira de Software e Especialista
em Arquitetura de Sistemas

python moderno para DevOps 7


CONFIGURANDO O AMBIENTE DE
DESENVOLVIMENTO
Desafios Comuns na Gestão
de Ambientes Python
gerenciar ambientes Python é algo
desafiador devido aos múltiplos projetos
com dependências específicas e incompa-
tíveis, dificultando a reprodutibilidade
entre ambientes de desenvolvimento,
teste e produção. A gestão de diferentes
versões do Python e o ciclo de vida das
dependências, incluindo segurança e
compatibilidade, também são complexos.

Os problemas geralmente manifestam-se


em conflitos de versões, instalações
corrompidas e na impossibilidade de
reproduzir o mesmo ambiente de forma
determinística. Durante muitos anos, este O pip, o gerenciador de pacotes
foi o principal desafio do ecossistema padrão, não consegue lidar com
Python. Recentemente, com a PEP-621, o duas versões diferentes do mesmo
Python passou a ter um sistema de build pacote, o que leva ao ‘inferno de
e gestão de dependências mais bem dependências’, fazendo com que
especificado, possibilitando o surgimento instalações inteiras falhem.”
de ferramentas como o Poetry e o UV,
sendo o UV a ferramenta mais moderna – Sagar Sharma,
para gerenciamento de projetos Python. jornalista da Analytics
India Magazine

python moderno para DevOps 8


Instalação e gestão de
ambientes com UV
a empresa Astral (também criadora da
ferramenta Ruff) criou uma ferramenta alguns exemplos do que pode
inspirada no Cargo (gestor de projetos ser feito com UV
da linguagem Rust), a proposta foi a de
fornecer uma Visão Unificada (Unified
Vision) para todas as tarefas de gestão Instalar uma versão do interpre-
de um projeto, seja uma biblioteca, uma tador Python:
aplicação ou simplesmente scripts em uv python install 3.13
Python que precisam ser executados
sem a preocupação com a gestão de um Iniciar um novo projeto:
ambiente. O UV abstrai toda a comple- uv init meu-projeto
xidade, é retrocompativel com PIP e
virtualenv, e super-rápido, pois seu core Adicionar uma dependência:
é escrito em Rust. uv add dynaconf

clique aqui para instalar siga as Executar um script:


instruções no repositório do projeto uv run programa.py ou uv
https://github.com/astral-sh/uv run dynaconf list

Compatibilidade com PIP e


pip-tools:
uv pip install ou uv pip
compile

clique aqui para acessar a documen-


tação oficial que possui guias para todas
as funcionalidades do projeto
https://docs.astral.sh/uv/
instalador de pacotes Python O UV é um gerenciador e
moderno e de alto desempenho,
escrito em Rust. Ele serve como
um substituto para as ferramentas
tradicionais de gerenciamento
de pacotes Python, como o pip,
oferecendo melhorias significativas
em velocidade, confiabilidade e
resolução de dependências.”

– Equipe da DataCamp,
em artigo sobre o UV

python moderno para DevOps 9


Ambientes virtuais
e isolamento de
dependências
a recomendação continua sendo a de ser inconveniente isso também é um
ter um ambiente virtual para cada projeto, ponto de falha, pois é bastante comum
isso pode ser feito diretamente no Python executar um comando assumindo estar
com o uso de python -m venv .venv num ambiente, mas, na verdade, estar a
este comando invoca o módulo venv e usar o Python do sistema, é realmente
cria um ambiente virtual nomeado .venv chato quando isso acontece.
que é a convenção mais comum para
nome de ambiente virtual. A inconve- O UV resolve este problema, pois com
niência de usar este modo, é que sempre UV não precisamos nos preocupar com
que precisar executar o projeto ou tarefas o ambiente virtual, a ferramenta abstrai
relacionadas a gestão do projeto, terá essa administração, basta nós sempre
que antes ativar o ambiente virtual com: lembrarmos de executar os comandos
source .venv/bin/activate ou então com o prefixo do UV, portanto.
executar os binários diretamente de
dentro da pasta do .venv e além de

Ao invés de ter que ativar a virtual env


da forma complicada:

python moderno para DevOps 10


Podemos simplesmente
usar o UV
a ferramenta se encarrega de habilitar a
virtualenv, e caso a virtualenv não exista,
o UV cria uma para o projeto, e não tem
mais esse problema de usar erronea-
mente o Python global do sistema.

Em casos onde o seu projeto é apenas


um único arquivo, um script apenas, o UV
facilita ainda mais, pois nem é necessário
que o UV crie e gerencie a virtualenv,
neste caso o UV pode usar a PEP-723
que permite adiciona as dependências
dentro do próprio script.

python moderno para DevOps 11


Qualidade de Código
manter a qualidade de código é algo No Ecossistema de Python Moderno,
essencial para que o projeto seja mais a maior parte dessas funcionalidades
fácil de manter, existem algumas práticas foram todas agregadas em uma única
e ferramentas que podem ajudar nesta ferramenta, o ruff
tarefa, os principais objetivos na qualidade
de código são: Estilo de Código coesoO Ruff consegue ajustar o estilo do seu
e padronizado, Baixa complexidade código seguindo as diretrizes da PEP-8 e
ciclomática, Organização de Módulos, do Black, organizar os imports, remover
Validação de tipos. variaveis não utilizadas e atualizar o seu
código para versões recentes do Python.
O ecossistema Python possui diversas Juntamente com o UV o Ruff é outra
ferramentas que podem resolver esses ferramenta essencial para um projeto
problemas. Algumas delas são: black, Python Moderno.
mccabe, pylint, isort e mypy.

INFO
uvx é o comando que usa o uv para executar ferramentas globais
do sistema, assim o ruff pode estar disponível para todos os seus
projetos não precisando instalar individualmente em cada um.

clique aqui para acessar o site


https://astral.sh/ruff

python moderno para DevOps 12


Além disso o ruff tem um LSP que se
integra com o seu editor (VSCode, Zed,
Neovim, Pycharm) e indica em tempo real
os problemas detectados em seu código.
O que o ruff ainda não faz é a validação
estática da tipagem do projeto. A Astral
está desenvolvendo uma ferramenta
chamada ty que já pode ser usada em
modo beta.

clique aqui para acessar a ferramenta


https://github.com/astral-sh/ty

E as alternativas são o mypy e o pyright que são ferramentas


já estabelecidas para este fim e que também podem ser
executadas com o uvx

python moderno para DevOps 13


VALIDAÇÃO DE DADOS
Anotação gradual de tipos
python por ser uma linguagem dinâmica,
faz inferencia dos tipos das variáveis
e parâmetros de função, sendo assim
podemos simplesmente escrever uma
função assim:

Parece que está tudo certo com a função acima né? e está!
aliás esse é um dos poderes do Python, ser simples e dinâmico.
Mas nem tudo são flores, apesar de simples em alguns casos
a função acima pode resultar em um erro de runtime

python moderno para DevOps 14


O erro acontece pois a função aceita
qualquer tipo de dado, porém nem todos
os tipos de dados são suportados na
operação de soma +. A parte pior é
que, devido a natureza dinâmica dos
dados, este erro pode só acontecer
em runtime, ou seja, em produção!

Uma das características mais importantes


do Python Moderno é anotação gradual
de tipos, ela permite que a gente descreva
os tipos esperados em nossa função,
ajudando o código a ser mais legível,
permitindo a análise estática de tipos e
até empoderando ferramentas como o
Pydantic que veremos a seguir.

Adicionamos nome: tipo na assinatura de parâmetros


da função e -> tipo na assinatura de retorno da função,
durante o runtime o interpretador Python simplesmente
coleta estas informações e as deixa disponível para que
ferramentas externas analizem. Exemplo:

python moderno para DevOps 15


E agora, podemos usar um analisador
estático de tipos como o mypy ou o ty

Ao executar o ty ou qualquer outro analisador de tipos,


podemos detectar estes problemas durante a nossa esteira
de testes e evitar que o problema aconteça em runtime.

python moderno para DevOps 16


Validação de dados com
Pydantic
apesar da checagem estática de tipos
ser interessante, ela não é suficiente pois
alguns erros serão inevitáveis, imagine
uma aplicação onde você depende de
dados externos, fazendo request de um
JSON de uma API ou lendo um arquivo
que o usuário faz upload, ou até mesmo
carregando dados salvos em um banco
de dados.

Para este caso teremos que lidar com o


erro, tomar uma decisão com base no
erro, informar o usuário da aplicação que
o erro aconteceu, e é ai que o Pydantic
nos ajuda.

Apesar do Python ter um suporte nativo


a dataclasses, elas não fornecem
validação em tempo de execução.

Vamos ver um exemplo com Pydantic.


Imagine que você tem um sistema que lê
um JSON de uma API ou de um arquivo
externo, exemplo user.json

python moderno para DevOps 17


Agora você usa a biblioteca json para
carregar o arquivo e também incrementar
a pontuação do usuário.

Este programa irá falhar com TypeError Para garantir a validação destes dados,
pois não é possível somar ”vinte” a 1,e vamos usar o Pydantic. Primeiro, nós
isso se deve ao fato de Python ser uma definimos o esquema de validação
linguagem com tipagem dinâmica mas dos dados e o modelo, e, só então,
ao mesmo tempo tipagem forte, isso carregamos os dados do JSON e os
significa que Python adere ao protocolo passamos para o esquema de validação.
dos objetos e não tenta fazer coerção
automaticamente, evitando assim erros
que poderiam ser silenciados, em outras
linguagens o resultado seria: ”vinte1”
mas Python não deixa isso acontecer.

python moderno para DevOps 18


Apesar do erro acontecer em runtime, podemos usar o
Pydantic para ajudar a definir regras de validação, por exemplo,
redirecionando o usuário, efetuando uma conversão de
dados ou mostrando uma mensagem mais interessante.
A recomendação inicial é que, qualquer dado que seja
carregado de fontes externas seja validado com um modelo
definido com Pydantic.

python moderno para DevOps 19


GERENCIAMENTO DE
CONFIGURAÇÕES
Dynaconf para gerenciar
configurações de forma
flexível
toda aplicação precisa de algum tipo de Tenho usado o Dynaconf há
configuração, seja através de um arquivo cerca de 4 anos e realmente
de settings ou via a leitura de variaveis de aprecio como o módulo
ambiente, a biblioteca Dynaconf fornece é projetado para resolver
uma interface para definição, validação e desafios recorrentes de
leitura de settings de forma padronizada. forma simples e direta.”

O terceiro item da metodologia 12-Factor – Carlos Neto,


App enfatiza a importância de armazenar desenvolvedor e autor do
configurações no ambiente, separan- blog Carlos Neto’s Tech Blog
do-as do código-fonte. Isso significa
que informações como credenciais de
banco de dados, chaves de API e variáveis
específicas de ambiente devem ser
mantidas fora do código, geralmente em
variáveis de ambiente. Essa prática facilita
a modificação das configurações entre
diferentes ambientes (desenvolvimento,
teste, produção) sem a necessidade
de alterar o código-fonte, promovendo
segurança, flexibilidade e escalabilidade.

python moderno para DevOps 20


A Dynaconf permite que os desenvolvedores definam variáveis
de ambiente com prefixo personalizado (por exemplo, MYAPP_)
e as utilize para configurar parâmetros da aplicação. Além
disso, o Dynaconf suporta a leitura de arquivos .enve e
diversos outros formatos para automatizar a exportação de
variáveis de ambiente, mantendo a flexibilidade e a segurança
das configurações.

aviso
No momento da escrita deste e-book, a funcio-
nalidade de tipos da Dynaconf esta em modo de
preview, algumas características estão sujeitas
a mudança e está prevista a estabilização no
lançamento da Dynaconf 4.0.0

python moderno para DevOps 21


A última configuração cria um objeto
settings a partir so esquema definido,
este objeto irá carregar as chaves de
configuração hostname com a validação
definida para que seja do tipo str e o
valor seja um entre “localhost” ou “server.
com”. E também uma chave port que
deve ser do tipo int, ser maior que 5000
e por default terá o valor 5001

A Dynaconf vai carregar toda variável de


ambiente que tenha o prefixo MYAPP_ e
também os arquivos settings.yaml
e .secrets.yaml caso existam.

As configurações também podem ser


definidas em nos arquivos, isso é útil
para ter valores default ou para arquivos
que são copiados durante o processo
de deploy.

E o arquivo.secrets.yaml é uma convenção, pode adicio-


na-lo ao .gitignore e nele definir suas senhas locais ao
ambiente.

python moderno para DevOps 22


Exemplos de configurações
para diferentes ambientes
(dev, testing, prod)
a dynaconf também permite a definição
de multiplos ambientes em camadas
quando usando arquivos de configuração,
isto é útil para configurações default.

E ao executar sua aplicação, por default


ela estará sempre no modo development
(o primeiro da lista) e você pode alternar
com a variável MYAPP_MODE

python moderno para DevOps 23


Usando a CLI da Dynaconf
para facilitar a inspeção das configura-
ções a Dynaconf possui uma ferramenta
CLI que permite algumas operações:

Além disso, a Dynaconf ainda suporta acessar storages


externos como Redis, Vault, Bancos de Dados e várias estraté-
gias para sobrecarga e combinação de settings.

clique aqui para acessar o site


https://dynaconf.com

python moderno para DevOps 24


CRIANDO E CONSUMINDO APIS REST
Desenvolvimento de APIs REST com
FastAPI
apesar de não ser este o trabalho central
de uma pessoa de DevOps, muitas vezes
a solução de problemas pode envolver
publicar uma API, seja para experimentos
ou para simular uma API real para testes.

O FastAPI é o framework mais modernos


do ecossistema Python, ele é baseado
no Pydantic, usa as anotações de tipo em
sua definição de API e entrega pratica-
mente tudo pronto, desde a validação até
a documentação, é a ferramenta perfeita
para API rápidas, leves e escritas com
pouco código. Vamos a um exemplo
prático que fica mais didático:

Imagine que sua tarefa é servir uma API


REST que retorna métricas do sistema.
15 linhas de código são suficientes para
uma API completa, pode executar com:

python moderno para DevOps 25


Acesse no seu browser http://localhost:8000/docs

python moderno para DevOps 26


Consumindo APIs REST

python moderno para DevOps 27


pra quem trabalha com DevOps é impres-
cindível saber usar a ferramenta cURL,
é praticamente um padrão para acesso
a URLs e APIS.
Essa mesma operação pode ser feito
dentro de um script Python com a biblio-

teca requests, a vantagem é que estando no Python podemos


usar o Pydantic para efetuar a validação dos dados recebidos.

LINHA DE COMANDO

python moderno para DevOps 28


python moderno para DevOps 29
Criação de CLIs
tarefas repetitivas devem ser automa- ideia de como a ferramenta funciona.
tizadas, e existem várias ferramentas Existem excelentes ferramentas dentro do
que ajudam com essas tarefas, como por Python Moderno para criação de CLI, entre
exemplo: editores de texto, executores as mais famosas estão Typer, Pydanti-
de comandos como Make ou Just, e c-Typer, Fire, Arguably e o Cyclopts, eu
suites de automação como o Ansible. pessoalmente gosto mais do Cyclopts
Mas mesmo com essas ferramentas pela sua simplicidade.
todas, pode sempre ter aquele caso onde
você quer criar a ferramenta para ter o Suponhamos que você tenha um template
controle total de seu uso e validação e de Dockerfile e quer criar uma ferramenta
também para permitir que outras pessoas CLI que irá gerar o arquivo para você
utilizem a ferramenta. através da parametrização.

Os problemas que você vai resolver com aviso


CLI vão variar de acordo com a necessi- Cuidado! A criação de CLI pode se tornar
dade do seu projeto, vamos fazer aqui um vício, e é bastante recomendado!
um exemplo simples só para te dar uma

Inicialize um projeto do tipo package


com o UV

python moderno para DevOps 30


Edite o programa criado pelo UV adicio-
nando a lógica da sua aplicação

python moderno para DevOps 31


python moderno para DevOps 32
Instale o seu pacote como um tool global do UV (desta forma
não vai precisar usar `uv run`)

Agora pode executar seu binário diretamente

python moderno para DevOps 33


O legal é que a entrada do CLI é validada
com os tipos definidos na função do
comando.

Agora, você basta usar a criatividade


integrando com outras ferramentas!
Quando estiver pronto, poderá rodar uv
build e uv publish e , assim, outras
pessoas poderão usar sua ferramenta
instalando com pip install ou uv add

python moderno para DevOps 34


TESTES E QUALIDADE
Testes com pytest
o python tem uma biblioteca de testes
embutida, o UnitTest, porém o Python
Moderno adota o pytest por ser uma
ferramenta mais atualizada e muito mais
simples de usar.

Vamos continuar em nossa aplicação


dfgen e escrever alguns testes para ela.
Primeiro, adicionamos o pytest como
dependência, mas um detalhe importante
aqui é que adicionamos apenas no grupo
test. Desta forma, quem instalar nossa
aplicação não vai precisar do pytest e só
o instalaremos apenas quando formos
rodar os testes.

Agora podemos adicionar um arquivo


de testes.

python moderno para DevOps 35


E no arquivo de teste usamos o Pytest
para definir um teste unitário que vai
usar parametrização e fixtures.

python moderno para DevOps 36


Agora basta executar os testes.

Repare que escrevemos apenas um teste


mas o Pytest executou 2! Isso aconteceu
pois o pytest irá repetir o teste para cada
item da parametrização. Repare também
que usamos um arquivo temporário sem
precisar se preocupar com a gestão
deste arquivo, graças a existência de
fixtures no pytest. Neste caso usamos
uma fixture embutida a tmpdir mas é
possível criar um arquivo conftest.
py e nele definir suar próprias fixtures
para reutilizar.

Além de testes unitários – que são esses


testes em que invocamos funções indivi-
dualmente como fizemos com generate
– podemos, também, escrever testes
funcionais que iriam de fato executar a
ferramenta dfgen na linha de comando
e testar o seu retorno. A estrutura é a
mesma, a diferença é que, neste caso,
usariamos subprocess para executar
a ferramenta CLI em um shell separado.

python moderno para DevOps 37


Testes de performance com
Locust
agora ao invés de testar unitariamente Para testar vamos usar a API que criamos
a nossa aplicação vamos ver como ela lá no começo, lembra? a API que retorna
se comporta em uma carga grande de as métricas do sistema. Execute aquela
requisições, o Locust é uma ferramenta API e deixe a rodando na porta 8000 e
que ajuda nesta tarefa e além de poder vamos testar se ela aguenta a carga.
ser usado para testes pode também ser Para poder começar, precisamos de um
usado para chaos-engineering, ou seja, locustfile.py
simplesmente simular muitas requisições
e ver se a infra + aplicação aguenta a carga.

O conteúdo do locustfile é a especifi-


cação em Python de quais endpoints
serão executados.

python moderno para DevOps 38


Para executar, podemos utilizar o uv
passando --with locust para ele
garantir que o locust será instalado e
então chamar o binário do locust

Assim que abrir no browser, a interface aviso


web do locust vai oferecer um formulário
para parametrizar a sessão de teste de Cuidado, não faça esse teste em
carga. Se a sua infra for boa, pode colocar produção, a não ser que este seja
algo como 100 usuários simultaneamente, mesmo o objetivo, pois você pode
ou até aumentar se estiver testando um causar um DoS.
ambiente altamente escalável em staging.

python moderno para DevOps 39


Ao clicar em start o locust começa a
orquestrar as requisições simultanea-
mente, lembre-se que isso vai consumir
recursos também da máquina onde o
locust está sendo executado.

Ele vai executar até ser parado no botão


de STOP ou automaticamente se você
configurar o tempo limite da sessão em
“advanced options”. durante a execução
ele vai atualizando gráficos em tempo
real para monitorar o comportamento
da aplicação.

Um dos principais objetivos deste tipo de teste é verificar o


rácio entre sucessos e falhas, e, então, saber qual é o SLA
e qual a carga que sua aplicação aguenta, além de testar se
os load balancers estão funcionando corretamente.

python moderno para DevOps 40


atenção
O locust executa localmente, provavelmente em
ambientes que estão atrás de proxy ou CDN,
será efetuado um throlting, ou seja, limitação
de acessos simultâneos, neste caso o Locust
permite estratégias de randomizar user-agent,
rotear saida por interfaces de rede diferentes
e até rodar em cluster.

python moderno para DevOps 41


DEBUGGING EFICIENTE
Debugging interativo
suponha que você tenha que resolver
um bug no dfgen aquele programa CLI
que gera Dockerfiles que criamos ali no
capitulo sobre CLI, vamos assumir que o
bug é que o arquivo está sendo escrito de
forma incorreta e você quer inspecionar
o file descriptor e o conteúdo.

Você poderia simplesmente colocar um


print mas não seria interativo e Python
possui um debugger embutido, o pdb e
o seu uso é bastante simples:

python moderno para DevOps 42


Executando o script em modo interativo faz com que o pdb
pause a execução na primeira linha de execução e abre
um prompt onde espera um comando, para listar todos os
comandos digite ?

Por exemplo, o comando l mostra qual é a linha atual em que


o interpretador se encontra:

Para seguir para a próxima linha digite n ou next , para ir até


uma linha especifica digite until 74

E neste momento podemos interativamente mudar a execução


do programa, por exemplo, alterando o valor da variável
__name__ e usando s (step in), c (continue), ou n (next).

python moderno para DevOps 43


Este modo interativo é útil para quando queremos debugar
um script sem a necessidade de editar o arquivo, porém,
se pudermos editar o arquivo, tem um jeito mais fácil!
Abra o src/dfgen/__init__.py e lá na linha 74 coloque
um breakpoint()

Agora execute o comando normalmente: dfgen

python moderno para DevOps 44


Pronto, agora o programa está pausado
exatamente no ponto onde você pode
interativamente inspecionar o f para ver dica
se está tudo certo com o descritor de A interface do pdb é bastante primitiva.
arquivos, inclusive pode até ir olhar lá no Existe um sucessor dele chamado ipdb
sistema operacional em /proc para ver que oferece um terminal baseado no
se o FS está lá mesmo, ou até simular ipython, portanto, a experiência é bem
um OSError ou um Race Condition, e o melhor para usar o ipdb
mais importante, pode simplesmente
digitar dockerfile_content para ver
se o conteúdo foi gerado com sucesso.

Agora você tem um debugger dica bônus


com bem mais funcionalidades Se você gosta de ferramentas mais visuais pode testar
e suporte a syntax highlight. o pudb ou o winpdb o funcionamento é praticamente
o mesmo, a diferença é que eles iniciam interfaces
mais amigáveis, além disso você pode estender o
`pdb` a partir da instalação de um plugin, o pdb++
com uv add –dev pdbpp assim que é instalado
ele se injeta no pdb do sistema, basta usar o pdb
normalmente que ele terá superpoderes.

python moderno para DevOps 45


Debugging remoto
anteriormente falamos sobre debugar
um programa que está rodando na sua
máquina local, mas e se o programa
estiver sendo executado remotamente?
Dentro de um container docker, por
exemplo, ou em um pod do seu cluster
K8S. Neste caso podemos executar o
pdb mas faze-lo ser acessível através
de uma porta TCP.

Para simular este caso precisaremos de


um Dockerfile e um programa Python
para debugarmos e um debugger remoto
chamado remote-pdb

python moderno para DevOps 46


O programa script.py

E agora fazemos o build da imagem e


executamos

Assim, abrimos um segundo terminal


e conectamos ao debugger, a conexão
pode ser feita a partir de qualquer cliente
telnet

python moderno para DevOps 47


As alternativas são ainda o nc e o socat dica
e se você uma IDE como VSCode ou Mesmo que você seja usuário de IDE,
NeoVIM, pode usar o debugpy que é recomendo saber usar um debugger na
um debugger com suporte a acesso linha de comando pois existem casos
remoto que implementa o protocolo onde o debugging tem que acontecer
DAP (Debug Adapter Protocol), dentro em ambientes limitados, ou, casos
dessas IDEs provavelmente não será onde a própria IDE causa problemas
preciso configurar muita coisa. de execução que queremos evitar.

Por meio do pdb, a depuração se


transforma em uma jornada de
entendimento e aprendizado. Ele nos
permite mergulhar nas profundezas
do nosso código, explorando seu
comportamento, dissecando os bugs
e iluminando os caminhos que nosso
programa percorre.”

– Sunscrapers

python moderno para DevOps 48


FERRAMENTAS DE
PRODUTIVIDADE
Tarefas com Taskipy
todo projeto tem tarefas administra-
tivas que são repetitivas, vamos pegar por
exemplo nosso projeto dfgen queremos
garantir que a qualidade de código está
correta, que os testes executem, que
um arquivo de requirements possa ser
gerado, que os arquivos temporários
sejam limpos, etc etc etc…

Já é conhecido de quem trabalha com


linux o uso da ferramenta make com
Makefile para declarar essas tarefas,
mas você sabia que isso é uma das
maiores gambiarras da computação?
O make não foi feito para rodar seus
testes! ele foi feito para automatizar a
criação de arquivos, por isso o nome.

No Python Moderno existe uma solução


bastante simples, o taskipy.

python moderno para DevOps 49


Agora podemos editar o pyproject.
toml e lá no final declarar as nossas
tarefas.

Agora basta executar os comandos

A grande vantagem nesse caso é que não é mais preciso


lembrar a sequência exata de comandos para executar, estará
sempre disponível no task -l

python moderno para DevOps 50


INTERAÇÃO COM SERVIÇOS
EXTERNOS
Integração com Git
considerando um repositório Git que Este exemplo cria uma nova branch,
esteja rodando localmente (não estamos adiciona todos os arquivos, adiciona
falando de Github nem Gitlab, apenas git), um commit e no final, gera um patch.
você pode usar Python para efetuar ações Isso pode ser muito útil para criar uma
no repositório. Por exemplo: automatizar ferramenta de auditoria ou até mesmo
as tarefas recorrentes no repositório ou para usar essas informações em uma
criar um CLI alternativo para o GIT ou, até integração com IA.
mesmo, usar informações do repositório
em seu script de deploy.

python moderno para DevOps 51


Para executar o exemplo

dica
Algumas pessoas confundem git com github
ou gitlab sendo que esses 2 últimos são na
verdade serviços de hospedagem, além da bilbio-
teca GitPython que acabamos de usar, também
existem as libs PyGithub e a PyGitlab que podem
ser usadas em conjunto com o GitPython para
automatizar tarefas no serviço, por exemplo,
listando issues ou criando pull requests.

python moderno para DevOps 52


Docker
docker é uma das ferramentas mais úteis permite efetuar ações no docker como
para quem trabalha com DevOps, a biblio- criar containers, fazer build de imagens
teca docker-py fornece uma interface etc, o que é útil para criar um painel de
para interagir com docker em programas controle ou um CLI customizado. Veja um
Python, sendo possível obter informa- exemplo simples de como listar imagens
ções, útil por exemplo para criar uma docker do seu sistema usando Python:
ferramenta de monitoramento e também

E para executar podemos informar ao uv que precisamo da


lib com --with docker ou se preferir execute uv add –
script meudocker.py docker

python moderno para DevOps 53


Quer um desafio?
Crie já um CLI (como fizemos com o
dfgen) que:

1. Recebe argumentos para executar


containers docker, mas usa um prompt
de texto ao invés de parâmetros.

meudocker “roda o nginx na


porta 8080”

Isso pode ser feito de diversas maneiras,


como usar regex para extrair os padrões,
pode dar um .split()no prompt e
então ir construindo o comando final
iterativamente ou pode se aventurar em
usar um agente de AI com MCP.

python moderno para DevOps 54


Kubernetes
para finalizar, vamos agora falar sobre
a ferramenta mais importante atualmente
para DevOps, o Kubernetes, e sim, é
possível usar Python para automatizar
tarefas ou até mesmo criar um painel ou
uma CLI para esta ferramenta.

Para facilitar, vamos usar o GIRUS, uma


ferramenta da LINUXtips para facilitar o
aprendizado com Kubernetes.

clique aqui para instalar o GIRUS


https://linuxtips.io/girus-labs/

O próprio instalador vai te indicar os


próximos passos, então, siga todos eles.
E também pode demorar um pouco para
criar o cluster.

python moderno para DevOps 55


Vamos fazer o deploy do nginx

python moderno para DevOps 56


Salve o arquivo e execute

Maravilha! Temos um 2 pods rodando o


NGINX. É o suficiente para nosso experi-
mento. Vamos usar Python para obter
as mesmas informações.

python moderno para DevOps 57


Este exemplo foi propositalmente bem
simples, pois as possibilidades de uso
do kubernetes-client com Python são
imensas e o repositório oficial oferece
exemplos mais completos

clique aqui para acessar o site


https://github.com/kubernetes-client/python

Quer mais um desafio?


Crie uma ferramenta CLI ou API, que:

1. Recebe os argumentos do
deployment.yaml
2. Salva o arquivo temporariamente.
3. Aplica o deployment.
4. Remove o arquivo temporário
5. E também exibe o status dos pods
deste deployment:

meuk8s –name postgres –image


postres:latest –replicas 3 –
port 5432.

Ou, se quiser usar mais a criatividade,


regex, parsing ou AI:

meuk8s “faz deploy do nginx com


2 replicas na porta 80”

python moderno para DevOps 58


CONCLUSÃO
neste guia, exploramos o poder do
Python Moderno para DevOps, focando
em ferramentas e técnicas práticas.
Vimos como configurar ambientes
com UV, garantir qualidade de código
com Ruff, validar dados com Pydantic e
gerenciar configurações com Dynaconf.
Aprendemos a criar e consumir APIs
REST com FastAPI, automatizar tarefas
com CLIs e Taskipy, e interagir com
serviços externos como Git, Docker e
Kubernetes. Além disso, abordamos
testes com Pytest e Locust, debugging
eficiente com PDB e ferramentas de
produtividade. Dominar essas habili-
dades transforma o Python em um aliado
essencial para a automação e eficiência
em DevOps.

python moderno para DevOps 59


PRÓXIMOS PASSOS
Python para Devops
chegamos ao fim da nossa conversa, mas
para você, é apenas o começo de uma O que você vai aprender e
jornada incrível no mundo da tecnologia. colocar em prática?
Se você leu até aqui, é porque entende
a importância de se manter atualizado, fundamentos do Python para
de buscar conhecimento prático e de se automação entenda a estrutura e
destacar em um mercado que não para de as melhores práticas para escrever
evoluir. O cenário de DevOps exige profis- scripts eficientes.
sionais completos, que não só entendem
os conceitos, mas que sabem aplicá- networking e segurança como
-los na prática, otimizando processos o Python pode te ajudar a gerenciar
e construindo soluções robustas. É por redes e garantir a segurança dos
isso que dominar ferramentas como o seus ambientes.
Python se tornou um diferencial inegável.
Mas como levar esse conhecimento para manipulação de dados e observa-
o próximo nível e aplicá-lo de verdade em bilidade trabalhe já com diferentes
um ambiente DevOps? A resposta está formatos de dados e aprenda como
no novo treinamento exclusivo Python monitorar suas aplicações e sistemas.
para DevOps da LINUXtips!
automação com ferramentas
Este treinamento é uma experiência DevOps aprenda a integrar o Python
prática, focada em te dar as ferramentas e com ferramentas como Ansible para
o conhecimento para ser um profissional orquestrar e automatizar processos
de ponta. Desenvolvido por especia- complexos.
listas que vivem o DevOps, o treina-
mento vai te capacitar a usar o Python construção de CLIs e de APIs
para automatizar tarefas repetitivas, Desenvolva as próprias ferramentas
provisionar infraestrutura, gerenciar de linha de comando e APIs para
configurações e construir pipelines de interagir com seus sistemas.
CI/CD que realmente funcionam.

python moderno para DevOps 60


Seja você um Engenheiro DevOps que
busca otimizar rotinas, um Desenvol-
vedor Backend querendo elevar suas
APIs, ou um profissional de TI que deseja
entrar de vez no mundo da automação, o
“Python para DevOps” foi feito para você.
Prepare-se para projetos reais, desafios
que simulam o dia a dia do mercado e
um aprendizado que te coloca à frente.

clique aqui para garantir a sua vaga e


saber mais sobre o novo treinamento
Python para Devops da LINUXtips
https://linuxtips.io/python-para-devops/

Outros treinamentos
A LINUXtips oferece uma gama completa Agora, se você já conhece a base de
de treinamentos para DevOps e desenvol- Python e quer se aprofundar ainda mais
vimento de software que podem comple- em desenvolvimento web, o treina-
mentar o seu conhecimento. mento Python Web API aborda desde os
Se você tem interesse em entender tudo princípios básicos da internet, comuni-
sobre a linguagem Python em detalhes cação em rede, criação do seu próprio
e explorar cada um dos elementos por web framework do zero e o uso dos
trás da linguagem, o treinamento Python principais frameworks e ferramentas de
Base oferece 64 horas + aulas ao vivo de mercado como Flask, Django e FastAPI
conteúdo que não tem nada de básico! em projetos reais.

clique aqui para acessar o treinamento clique aqui para acessar o treinamento
Python Base da LINUXtips Python Web API da LINUXtips
https://linuxtips.io/treinamento/python-base/ https://linuxtips.io/treinamento/python-web-api/

python moderno para DevOps 61


CONSIDERAÇÕES FINAIS
Agradecimento especial para todas
as pessoas que acompanham o meu
conteúdo nos canais e na LINUXtips, a
toda a equipe da LINUXtips por fazer
a revolução no ensino de tecnologia
acontecer e principalmente a minha
família, minha esposa Karla e meu filho Erik.

E é claro a você que leu isso tudo até o


final! Obrigado!

python moderno para DevOps 62

Você também pode gostar