Atuin Desktop: Runbooks executáveis
(blog.atuin.sh)- O Atuin Desktop é um editor de runbooks local-first que parece um documento, mas é executado como um terminal; é uma ferramenta para transformar procedimentos operacionais repetitivos em fluxos de trabalho compartilháveis
- Ele lida com comandos de shell, consultas a bancos de dados e requisições HTTP juntos em blocos de script, terminal integrado, cliente de banco de dados e gráficos do Prometheus
- Se o Atuin CLI oferecia um histórico de shell sincronizável e pesquisável, o Desktop expande isso para documentos executáveis, para que o conhecimento da equipe não fique apenas na memória individual ou no histórico
- A equipe do Atuin já o usa em releases do CLI, migrações de infraestrutura entre ambientes, execuções em staging/prod e gerenciamento e colaboração em consultas a bancos de dados em produção
- Como próximos passos, estão planejados Team accounts e um recurso para criar runbooks a partir do histórico de shell; o early access já está sendo distribuído
Documentar procedimentos operacionais que dependiam da memória individual
- Muitas tarefas de infraestrutura, quando há uma falha, dependem de alguns comandos que alguém lembra, e a documentação tende a não existir ou a ficar desatualizada
- As pistas reais para a solução podem estar espalhadas em threads do Slack, documentos do Notion e históricos de shell pessoais
- O Atuin CLI resolveu parte desse problema com um histórico de shell sincronizado e pesquisável, mas equipes precisam de fluxos de trabalho compartilháveis que vão além do histórico
- O Atuin Desktop é um editor de runbooks executáveis criado a partir da premissa de que “runbooks devem ser executados”
- O download está disponível na página de download
Fluxos de trabalho de terminal executados dentro do documento
- O Atuin Desktop foi projetado para executar fluxos de trabalho reais de terminal dentro de uma interface de documento
-
Elementos de trabalho reunidos em um só lugar
- Blocos de script
- Terminal integrado
- Cliente de banco de dados
- Gráficos do Prometheus
-
Recursos oferecidos
- Menos troca de contexto: conecta comandos de shell, consultas a bancos de dados e requisições HTTP
- Documentos que não apodrecem: mantêm-se atualizados ao serem executados diretamente no documento
- Automação reutilizável: cria runbooks dinâmicos com templates no estilo Jinja
- Recordação imediata: oferece autocomplete a partir do histórico real de shell
- Local-first, com CRDT: o que roda no terminal também roda no runbook
- Sincronização e compartilhamento com Atuin Hub: mantém tudo atualizado entre dispositivos e equipes
Casos reais de uso e status de distribuição
- A equipe do Atuin já usa o Atuin Desktop em trabalhos reais
- Releases do Atuin CLI
- Migrações de infraestrutura entre ambientes
- Execuções em staging ou prod
- Gerenciamento e colaboração em consultas a bancos de dados em produção
- Entre os próximos recursos estão previstos Team accounts e a criação de runbooks a partir do histórico de shell
- Ele está em distribuição atualmente, e é possível participar pela lista de early access
1 comentários
Opiniões no Hacker News
Quem tiver curiosidade sobre Emacs pode fazer algo parecido com org-babel
Um único arquivo de texto puro pode ser ao mesmo tempo um programa e documentação/notebook/site, e é um exemplo convincente de programação literária
Há uma boa explicação aqui: https://osem.seagl.org/conferences/seagl2019/program/proposa...
Ele me ajudou muito ao estudar com livros de programação, e, quando volto depois àquele programa literário, retomo o entendimento muito mais rápido do que quando li o livro pela primeira vez
A parte literária responde às perguntas “bobas” que surgem porque não lembro 100% do raciocínio ou do que eu estava pensando na época
Claro que há uma curva de aprendizado, então não serve para quem não quer aprender esse tipo de coisa
Também dá para ver o vídeo da apresentação[0] e um repositório Git[1] com uma demonstração mais avançada
[0]: https://www.youtube.com/watch?v=0g9BcZvQbXU
[1]: https://gitlab.com/spudlyo/orgdemo2
Tentei fazer isso há cerca de 7 anos: https://nurtch.com/
A ideia em si tem muitos méritos, e também fiz uma apresentação relacionada na JupyterCon Paris 2023: https://www.youtube.com/watch?v=TUYY2kHrTzs
Quando há código executável dentro da documentação, as pessoas passam a querer aplicar também à documentação um fluxo de revisão de PR, e isso exige um investimento maior da equipe do que editar uma wiki
Era exatamente o que eu queria para a nossa equipe quando estava na AWS
Há muitas tarefas operacionais que são um pouco arriscadas para automatizar totalmente, e isto oferece um caminho para transformar isso em automação de forma iterativa
Fiquei curioso para saber quando você esteve na AWS
Nos últimos anos, a AWS criou um serviço interno de plataforma que ajuda a codificar runbooks operacionais e executá-los automaticamente com segurança para reduzir o trabalho operacional repetitivo
O Atuin Desktop é parecido com esse serviço em alguns aspectos, mas o serviço interno tinha muito mais recursos
A ideia era executar consultas do CloudWatch, comandos da AWS CLI e coisas do tipo com entradas do usuário, mas eliminar a carga de configuração de buscar as credenciais corretas com segurança e formatar as entradas
Depois refiz isso para executar diretamente no GitHub; há aqui um exemplo de chamada de uma função Lambda a partir de uma wiki do GitHub com entradas do usuário em 4 linhas de código: https://speedrun.nobackspacecrew.com/index.html#invoking-an-...
Era um notebook hospedado com integração ao IAM
Fico curioso sobre como isso difere de um notebook Jupyter local
Não dá para fazer isso em um
.ipynbcom!ou%?Pergunto sinceramente, porque não conheço bem esta empresa nem o produto de CLI
O fluxo que começa com pipenv/pyenv/conda/poetry/uv/dependencies.txt e “ah, preciso atualizar o Python para executar este notebook… ok” e, duas semanas depois, vira “essa atualização quebrou um Ansible antigo e agora não consigo consertar 15 servidores que já estavam se segurando por pouco” é um inferno
Tento manter Python longe da automação de base
Os projetos Python com que lido quebram pelo menos uma vez por ano por problemas de dependências ou de runtime, e isso também vale para Ansible, pipelines de build, coisas como
deploy.pyNotebooks Jupyter trazem uma árvore enorme de dependências e requisitos, então eu não os usaria para automações importantes e fundamentais desse tipo
Claro, meu trabalho me faz lidar com uma quantidade exagerada de codebases, e só nos últimos dois meses houve pelo menos 6 projetos Python
Alguns exigem Python 2.7, outros exigem uma versão descartada de
lib-something.h, outros estão na vanguarda, e outros não são documentados, mas na prática são extremamente rígidos, do tipo “funciona desde que ninguém atualize nada na máquina de um único desenvolvedor responsável”Puppet e Chef também são igualmente ruins por serem Ruby e sofrem dos mesmos problemas, mas há a diferença de que Ruby teve essencialmente um único sistema de gerenciamento de pacotes por décadas
Em geral, Jupyter parece oferecer tanto scripting flexível quanto suporte a comandos do sistema operacional
Também dá para fazer com
!/%ouos.system()Isto parece muito semelhante a https://runme.dev
Gosto de documentação executável e acho que ainda não há o suficiente disso
Parece interessante
Recentemente comecei a usar https://marimo.io/ como alternativa aos notebooks Jupyter, e ele traz várias melhorias; isto também parece um movimento em uma direção parecida
Se for local-first, já está sujeito a rot
A menos que tudo rode em contêineres; se rodar em contêineres, o fato de ser local não importa
Se quiser registrar um runbook, basta registrar um runbook
Há inúmeras formas: arquivo de texto, documento no Confluence, gravação de tela, script de shell etc.
As pessoas já não fazem isso, e uma UI mais bonita não vai fazê-las passar a fazer de repente
Pessoalmente, não quero passar o dia inteiro escrevendo código ou documentação para deixar um sistema no estado X
Quero criar manualmente o estado X, depois despejar esse estado com uma ferramenta e, mais tarde, executar a ferramenta de novo para criar ou impor esse estado
Não quero descrever em código como o computador chega a esse estado, nem usar configuração declarativa, que é código com outro nome
Quero fazer diretamente, tirar um snapshot e reproduzir
Deve funcionar em qualquer lugar e em qualquer sistema, sem depender de algo como monitorar comandos do shell Bash
Um Dockerfile é, na prática, parecido com isso, mas documenta em um arquivo as etapas percorridas para chegar àquele estado
https://linux.die.net/man/1/autoexpect
A essa altura, é melhor já ter uma descrição declarativa que possa ser convertida automaticamente nas etapas necessárias para chegar ao estado X
Para tarefas comuns, como verificar se um pacote está instalado, se um arquivo existe ou se tem determinado conteúdo, você usa módulos; é declarativo e idempotente
Fico curioso se isto também será open source, como o Atuin CLI e o servidor de sincronização
A ideia é transformá-lo em produto?
Ainda assim, é bom ver o anúncio
Não entendo muito bem por que isso é necessário
Alguém pode explicar o que estou perdendo? Por que eu deveria usar isso em vez de um simples script de shell?
Você está em uma equipe responsável por várias coisas; algumas conhece muito bem e mexe com frequência, outras você só sabe vagamente que existem e quase nunca toca
X, que está no segundo grupo, quebra
Todas as pessoas que realmente conhecem X estão de férias/mortas/em reunião
Felizmente, há um documento explicando o que fazer nessa situação
Mas, de alguma forma, esse documento é um milagre de informação ruim: desatualizado e errado
Esse é o problema que isto tenta resolver
Pelo que conversei um pouco com o criador, a intenção é algo mais próximo de criar um meio-termo entre Jupyter Notebooks e Ansible Tower
Documentação, scripts e métricas ficam próximos entre si, facilitando entender o que deu errado, como corrigir e se a correção funcionou
[1] Divulgação: ajudo a administrar o Discord do atuin
Por isso “Runbooks That Run”
Algumas pessoas gostam de certos workflows ou fluxos de ferramentas e simplesmente os criam
Se servir para gente suficiente, pode ou não haver mercado
Em projetos pessoais, uso um processo de deploy em PHP só porque quero, e ele faz 60% do trabalho sem que eu precise fazer separadamente
O runbook para isso são tarefas embutidas na ferramenta e ficam no mesmo repositório Git do deploy completo do servidor
Não quero colocar isso em algum lugar arbitrário nem em um script de shell para o qual eu precise lembrar um comando separado
Para programadores, código se torna essencialmente autodocumentado quando evita complexidade e mantém um estilo funcional simples
Só é preciso comentar ocasionalmente as partes que não são fluxos simples, como “criar um usuário MySQL, rotacionar a senha, refletir a nova combinação usuário/senha nos serviços relacionados e remover o usuário antigo cujas credenciais um funcionário demitido tinha, caso o bloqueio da VPN tenha falhado”
A ferramenta dos meus sonhos é uma em que todas as ferramentas ofereçam uma interface de terminal, permitindo criar um grande livro com todo o contexto que está na minha cabeça
Algo como reunir Jira, Datadog, GitHub etc. em uma única tela
Imagine um framework interno de TUI com componentes para cada serviço interno, que possam ser montados como Lego para criar dashboards TUI personalizados
Parece algo que daria para fazer como projeto paralelo na empresa; seria um trabalho enorme, mas interessante
Em um mundo ideal, todos os serviços, ferramentas e aplicativos ofereceriam uma API que eu pudesse usar
Por exemplo, se a porta da geladeira ficar aberta por tempo demais, detectar isso por polling da API ou por webhook e usar a API do Roomba para mandá-lo fechá-la
Por que não? É o mundo das APIs
Parece que o desenvolvimento está parado há um ano, mas a ideia é mais ou menos essa
https://wtfutil.com/