feat(plataforma): a etapa MANIFESTOS_GERADOS ganha o molde e a copia de trabalho
Era a primeira etapa do provisionamento e a unica bloqueada por algo MEU, nao por credencial do dono: o pod nao enxergava o molde nem o repositorio GitOps, e as tres propriedades ficavam vazias. Falhar fechado, nomeando a propriedade, era o comportamento certo — o que faltava era o material chegar. Um initContainer clona o repositorio em /gitops na subida. Dentro dele, moldes/consolidado e o molde e tenants/<nome> e onde a etapa escreve: UM volume serve aos dois, e por isso o molde foi para o repositorio GitOps no commit anterior. Tres decisoes que valem registro: - CLONE ANONIMO. O Gitea aceita leitura sem credencial neste repositorio, e leitura e tudo o que a etapa 1 precisa. Empurrar e a etapa ARGO_SINCRONIZADO, que depende de credencial e continua bloqueada — esta mudanca nao a destrava e nao tenta; - emptyDir, e nao PVC. A copia e descartavel por desenho: se o pod morrer no meio de um provisionamento, o que ficou pela metade some junto. Melhor do que um clone velho e divergente sobrevivendo entre reinicios; - a imagem e a do act_runner, que JA esta no no e tem git 2.45.2. Nao ha registry aqui, entao construir uma imagem so para ter git custaria mais do que reusar esta. O endereco e o interno (gitea-http.gitea.svc:3000), o mesmo do ApplicationSet. Depende do 19-netpol-gitea.yaml do commit anterior.
This commit is contained in:
@@ -32,11 +32,49 @@ spec:
|
||||
# Com a `default`, a permissao de ler e escalar Deployment dos tenants
|
||||
# valeria para qualquer pod que subisse sem `serviceAccountName`.
|
||||
serviceAccountName: atm-provisionamento
|
||||
volumes:
|
||||
- { name: gitops, emptyDir: {} }
|
||||
# P5.3 — a copia de trabalho do GitOps, refeita a cada subida do pod.
|
||||
#
|
||||
# CLONE RASO E ANONIMO. O Gitea aceita leitura sem credencial neste
|
||||
# repositorio (conferido em 2026-09-22), e leitura e tudo o que a etapa 1
|
||||
# precisa: ela RENDERIZA o molde para `tenants/<nome>`. Empurrar e a etapa
|
||||
# ARGO_SINCRONIZADO, que depende de credencial e continua bloqueada.
|
||||
#
|
||||
# `emptyDir`, e nao PVC: a copia e descartavel por desenho. Se o pod morrer
|
||||
# no meio de um provisionamento, o que ficou pela metade some junto — e isso
|
||||
# e melhor do que um clone velho e divergente sobrevivendo entre reinicios.
|
||||
#
|
||||
# A imagem e a do `act_runner`, que JA esta no no e tem git 2.45.2. Nao ha
|
||||
# registry aqui (`imagePullPolicy: Never`), entao construir uma imagem so
|
||||
# para ter git custaria mais do que reusar esta.
|
||||
#
|
||||
# O endereco e o INTERNO, o mesmo que o ApplicationSet do ArgoCD usa — o
|
||||
# externo passa por Ingress e TLS, e nao ha motivo para sair do cluster
|
||||
# para buscar o que esta dentro dele. Depende do `19-netpol-gitea.yaml`.
|
||||
initContainers:
|
||||
- name: clonar-gitops
|
||||
image: docker.io/gitea/act_runner:0.2.11
|
||||
imagePullPolicy: Never
|
||||
command: ["/bin/sh", "-c"]
|
||||
args:
|
||||
- |
|
||||
set -e
|
||||
git clone --depth 1 http://gitea-http.gitea.svc:3000/atmadmin/athletic-map-deploy.git /gitops
|
||||
test -d /gitops/moldes/consolidado || { echo "molde ausente no clone"; exit 1; }
|
||||
echo "clone pronto: $(ls /gitops/moldes/consolidado | wc -l) arquivo(s) de molde"
|
||||
volumeMounts:
|
||||
- { name: gitops, mountPath: /gitops }
|
||||
resources:
|
||||
requests: { cpu: 10m, memory: 32Mi }
|
||||
limits: { cpu: 200m, memory: 128Mi }
|
||||
containers:
|
||||
- name: servico-captacao
|
||||
image: docker.io/library/servico-captacao:1.5-realm
|
||||
imagePullPolicy: Never
|
||||
ports: [{ containerPort: 8083 }]
|
||||
volumeMounts:
|
||||
- { name: gitops, mountPath: /gitops }
|
||||
env:
|
||||
- { name: SPRING_DATASOURCE_URL, value: "jdbc:postgresql://postgres:5432/athleticmap?sslmode=require" }
|
||||
- { name: SPRING_DATASOURCE_USERNAME, value: "atm" }
|
||||
@@ -81,6 +119,18 @@ spec:
|
||||
# Depende do `18-netpol-sealed-secrets.yaml`: sem ele a conexao
|
||||
# nao sai (o ipBlock da deny-cross-tenant nao vale depois do DNAT).
|
||||
- { name: PROVISIONAMENTO_CERT_SELAGEM, value: "http://sealed-secrets-controller.kube-system:8080/v1/cert.pem" }
|
||||
# P5.3 — a copia de trabalho do GitOps e o molde, no MESMO volume.
|
||||
#
|
||||
# O initContainer clona o repositorio em /gitops na subida; dentro
|
||||
# dele, `moldes/consolidado` e o molde e `tenants/<nome>` e onde a
|
||||
# etapa escreve. Um volume serve aos dois.
|
||||
#
|
||||
# Vazio falhava FECHADO, nomeando a propriedade — era o estado ate
|
||||
# 2026-09-22. Escrever num diretorio temporario que ninguem commita
|
||||
# daria a impressao de que a etapa funcionou.
|
||||
- { name: PROVISIONAMENTO_GITOPS, value: "/gitops" }
|
||||
- { name: PROVISIONAMENTO_MOLDE, value: "/gitops/moldes/consolidado" }
|
||||
- { name: PROVISIONAMENTO_PLANO_PADRAO, value: "bronze" }
|
||||
- { name: CAPTACAO_LIMITE_POR_IP, value: "5" }
|
||||
# Destino do aviso ao comercial. Vazio = lead e gravado e o
|
||||
# aviso vira log sem PII. Preencher quando houver SMTP.
|
||||
|
||||
Reference in New Issue
Block a user