Pular para o conteúdo

Reconciliadores

Um reconciliador é um job automático que lê o catálogo e faz uma parte do mundo real corresponder a ele: os projetos na nuvem, os grupos do Google, os repositórios do GitLab ou os painéis. Depois de cada merge no catálogo, uma cadeia de reconciliadores roda em uma ordem fixa, e juntos eles constroem ou mudam tudo o que o catálogo descreve. É assim que um arquivo vira um produto funcionando sem que ninguém crie nada à mão.

Cada reconciliador é uma raiz do Terraform: um diretório de código Terraform que lê os arquivos do catálogo e declara o que deve existir. O Terraform compara isso com o que realmente existe e faz a diferença: cria o que falta, muda o que difere e remove o que o catálogo não pede mais.

Cada raiz tem sua própria identidade de pipeline, e essa identidade só pode mudar a sua parte da plataforma. A fábrica de projetos do domínio shop/store pode criar projetos nas pastas desse domínio, e nada mais. A raiz que administra as associações do GitLab não pode tocar em um projeto na nuvem. Se uma delas fosse comprometida, o dano ficaria dentro da sua própria parte.

O pipeline do próprio catálogo não tem nenhuma dessas identidades. Na branch main do catálogo, ele verifica os arquivos e inicia os pipelines dos outros repositórios, em ordem; ele não pode criar um projeto sozinho.

um merge nocatálogoo ciclo de vidano produtolanding-zone:projetos, gruposoperations:painéis, alertascontrol-plane:o repositóriolanding-zone de novo:faturamento, saídas

Quando um merge request no catálogo é integrado, o pipeline do catálogo na main roda estes passos, cada um esperando o anterior:

  1. O ciclo de vida roda. Se o merge mudou o status do ciclo de vida de um produto, por exemplo para retiring, o próprio pipeline do produto aplica essa mudança primeiro, com as identidades do próprio produto. Os serviços de um produto precisam sair antes que algo mais adiante exclua o que eles usam.
  2. landing-zone. Suas raízes criam a pasta de um contexto novo, os grupos do Google e seus membros, e, pela fábrica de projetos do domínio do produto, os dois projetos do produto, suas identidades de plan e de apply, seus lugares para o estado do Terraform e sua saída Ready: um pequeno documento que diz a cada raiz seguinte o que foi feito. Depois, as raízes de rede conectam os projetos que têm faturamento.
  3. operations. Suas raízes dão às identidades novas o que elas precisam para enviar telemetria, e criam a pasta, os painéis e as regras de alerta do produto no Grafana.
  4. control-plane. Suas raízes do GitLab criam o repositório do produto, protegem sua branch main, dão à equipe suas associações e permissões de merge, e escrevem o primeiro commit, gerado a partir do template do golden path com os valores da entrada do catálogo.
  5. landing-zone de novo. Uma segunda passada termina o que precisava dos outros primeiro. Para um produto que está saindo, ela desvincula o faturamento ou exclui os projetos, depois que control-plane e operations retiraram o que tinham concedido às identidades do produto.

Uma nota no merge request do catálogo já integrado acompanha esses passos enquanto rodam, com seus horários e links. Para um produto novo, ela termina quando o produto responde no seu nome de host, ou nomeia o passo que falhou.

Cada passo usa o que o passo anterior fez. Operations não pode conceder nada a uma identidade que ainda não existe, então roda depois que landing-zone criou as identidades. Control-plane escreve o primeiro commit do repositório a partir da saída Ready, então roda depois que a fábrica de projetos a publicou. E um produto que deixa a plataforma precisa primeiro parar de rodar, depois perder suas concessões, e só então perder seus projetos: por isso o ciclo de vida vem primeiro e a segunda passada de landing-zone vem por último.

A cadeia é rígida com falhas pelo mesmo motivo: cada passo espera seu pipeline terminar, e se um falha, os passos seguintes não rodam. Nada mais adiante age sobre algo que não foi feito.

O que significa “nada derivado é editado à mão”

Seção intitulada “O que significa “nada derivado é editado à mão””

Tudo o que um reconciliador cria fica registrado no seu estado do Terraform, e o reconciliador é o único jeito de mudá-lo. As identidades de um projeto, as proteções de um repositório, as associações de uma equipe e um painel são mudados mudando o catálogo, nunca no console do Google Cloud nem nas configurações do GitLab.

É uma regra que tem efeito. Se alguém muda à mão algo derivado, o próximo plano dessa raiz vê a diferença e a desfaria, e um plano agendado de cada raiz a relata como desvio em uma issue. O jeito de mudá-lo de verdade é um merge request no catálogo.

Uma falha para a cadeia naquele passo, e a nota de progresso no merge request do catálogo nomeia o job que falhou e o que fazer em seguida. As causas comuns são um erro no catálogo que suas verificações não pegaram, uma cota do Google Cloud, ou um bug em uma raiz.

A correção é um merge request: no catálogo, se a entrada estava errada, ou no repositório da raiz, se a raiz estava. O merge roda a cadeia de novo, e como cada raiz só faz a diferença entre o catálogo e o que existe, rodá-la de novo é seguro: o que já foi feito fica como está. O agendamento diário de cada repositório planeja suas raízes sem aplicá-las, então nada muda até alguém integrar uma correção.

Onde fica

No repositório catalog:

No repositório landing-zone:

No repositório operations:

No repositório control-plane:

Licença MIT. Copyright dos colaboradores do Airframe.

Este site descreve a versão 2026.10.20-1 da plataforma.