diff --git a/tenants/plataforma/82-servico-captacao.yaml b/tenants/plataforma/82-servico-captacao.yaml index 0e042b4..3d647c7 100644 --- a/tenants/plataforma/82-servico-captacao.yaml +++ b/tenants/plataforma/82-servico-captacao.yaml @@ -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/`. 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/` 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.