- Castro/
- blog/
- Rollout de NODE_OPTIONS com ipv4first em frota Node: validação e rollback com Semaphore/
Rollout de NODE_OPTIONS com ipv4first em frota Node: validação e rollback com Semaphore
Um rollout real de NODE_OPTIONS=--dns-result-order=ipv4first em uma frota Node, com validação por serviço e rollback automático quando a aplicação não passou nos testes.
Uma variável de ambiente parece uma mudança pequena até precisar ser aplicada em uma frota inteira.
Neste caso, uma execução real via Semaphore/Ansible propagou:
| |
O ponto mais interessante não é a flag. É o que aconteceu depois de aplicá-la: a automação verificou os serviços, executou testes repetidos e fez rollback nos hosts que não passaram na validação.
E a evidência também impõe um limite importante: ela não prova que IPv6 era a causa raiz do incidente original e não menciona Redis. Uma correção funcionar não autoriza reescrever o passado.
O que a execução real comprova #
O log do Task Runner mostra um play explicitamente voltado a aplicar NODE_OPTIONS com validação e rollback em uma frota ampla.
Nos hosts que concluíram a mudança, a validação registrou processos Node com ipv4first ativo. Em exemplos da própria execução, os serviços de API e webhooks responderam com HTTP 200 e uma série de dez testes terminou sem falha.
O estado observado incluía, entre outros parâmetros:
| |
Em parte da aplicação também havia configuração relacionada à seleção automática de família de rede.
Isso sustenta:
| |
Não sustenta:
| |
Essa distinção é importante porque o log recuperado documenta muito bem o rollout, mas não reconstrói sozinho a falha que motivou a mudança.
A automação não tratou “container subiu” como sucesso #
Um rollout frágil poderia terminar assim:
| |
O play fez mais.
A validação observou a aplicação depois da alteração e verificou endpoints de API e webhooks. Também executou uma pequena série de requisições para confirmar comportamento consistente.
A diferença é operacionalmente grande:
| |
Um container pode estar em execução e a aplicação continuar incapaz de atender o caminho que motivou a mudança.
O rollback aconteceu de verdade #
Dois hosts não passaram na validação.
Em vez de considerar o lote inteiro verde ou deixar os hosts em estado intermediário, o play entrou no caminho de rollback. O log registra:
| |
Depois disso, a automação ainda manteve a falha visível quando o host não voltou aos critérios esperados.
Esse comportamento é um guardrail importante: rollback não serve para esconder falha; serve para tentar retornar ao estado anterior e deixar o resultado explícito.
A frota real também tinha hosts inacessíveis #
A etapa inicial de coleta encontrou alvos que não estavam alcançáveis por SSH.
Isso também é evidência útil. Em operação de frota, “aplicar em todos” raramente significa que todos os alvos estão disponíveis ao mesmo tempo.
Uma execução segura precisa separar pelo menos:
| |
Misturar tudo em uma única mensagem de “sucesso” cria uma visão falsa da mudança.
Por que ipv4first não significa “IPv6 estava quebrado” #
O ajuste influencia a ordem de resultados de DNS usada pelo runtime Node.
Ele pode ser útil quando existe diferença de comportamento entre caminhos IPv4 e IPv6, mas isso não transforma automaticamente a hipótese abaixo em fato:
| |
Para afirmar causalidade seria necessário recuperar evidência anterior à mudança, por exemplo:
| |
Essa fonte não contém essa cadeia completa.
Por isso o case público fica no que é comprovável: como uma mudança de runtime foi propagada, validada e revertida de forma controlada.
Um modelo melhor para rollout em frota #
O fluxo observado pode ser generalizado assim:
| |
Esse desenho é mais importante que a flag usada neste caso.
O mesmo padrão vale para mudanças como:
- variáveis de runtime;
- parâmetros de proxy;
- configurações de conexão;
- feature flags operacionais;
- ajustes de JVM/Node/PHP;
- troca de endpoint ou resolver.
Configurado, validado e resolvido são estados diferentes #
Eu separo três estados:
| |
A execução recuperada comprova muito bem os dois primeiros para diversos alvos.
Ela não é suficiente, isoladamente, para provar toda a história causal do incidente original nem estabilidade indefinida depois do rollout.
O que eu exigiria antes de repetir uma mudança desse tipo #
| |
O principal aprendizado #
A parte forte desse case não é:
“adicione
ipv4firstque resolve”.
É outra:
uma correção de configuração só vira operação segura quando a automação consegue provar onde ela funcionou, onde não funcionou e como voltar.
O log real mostra exatamente isso: aplicação em escala, validação funcional, falhas reais e rollback real — sem precisar inventar uma causa raiz que a fonte não demonstra.
Leitura relacionada #
Este rollout é um exemplo concreto do modelo operacional descrito no case Ansible Semaphore em frota ampla: guard-rails para não rodar no alvo errado.
Me chama.
Manda o contexto, os sintomas e o que já foi testado. Bora organizar as evidências antes de sair mexendo.