feat(P6.4): expurgo da trilha nos Postgres proprios — CronJob no escolinha-prod e expurgo-trilha-proprio na plataforma (BANCOS fixo)
This commit is contained in:
@@ -0,0 +1,85 @@
|
||||
# =============================================================================
|
||||
# P6.4 no ESCOLINHA — expurgo das trilhas de auditoria com mais de 5 anos no
|
||||
# Postgres PROPRIO deste namespace (o escolinha nao esta no pg-compartilhado).
|
||||
# Copia do 57- da plataforma com tres diferencas: PGHOST e o `postgres` daqui,
|
||||
# BANCOS fixo em `athleticmap`, e o Secret `pg-expurgo-trilha` deste namespace
|
||||
# (papel criado e selado em 30/09/2026 — scripts/banco/papel_expurgo_trilha.sql).
|
||||
# Domingo 05:20: depois do backup (02:00), da eliminacao (04:40) e do expurgo
|
||||
# do compartilhado (05:10).
|
||||
# =============================================================================
|
||||
apiVersion: v1
|
||||
kind: ConfigMap
|
||||
metadata:
|
||||
name: expurgo-trilha
|
||||
namespace: escolinha-prod
|
||||
data:
|
||||
expurgar.sh: |
|
||||
#!/bin/sh
|
||||
set -u
|
||||
: "${PGPASSWORD:?falta PGPASSWORD (Secret pg-expurgo-trilha)}"
|
||||
# BANCOS vem fixo (Postgres PROPRIO de um namespace: so `athleticmap`) ou e
|
||||
# descoberto (compartilhado: todo `athleticmap_%`).
|
||||
if [ -z "${BANCOS:-}" ]; then
|
||||
BANCOS="$(psql -d postgres -Atc "select datname from pg_database where datname like 'athleticmap\_%' order by 1")" \
|
||||
|| { echo "ERRO: nao consegui listar os bancos." >&2; exit 1; }
|
||||
fi
|
||||
[ -n "${BANCOS}" ] || { echo "ERRO: nenhum banco athleticmap_* encontrado." >&2; exit 1; }
|
||||
FALHOU=0
|
||||
for DB in ${BANCOS}; do
|
||||
for SCHEMA in cadastro financeiro; do
|
||||
TEM="$(psql -d "${DB}" -Atc "select to_regprocedure('${SCHEMA}.expurgar_trilhas_vencidas()') is not null" 2>&1)"
|
||||
if [ "${TEM}" != "t" ]; then
|
||||
echo "${DB} ${SCHEMA}: sem a funcao de expurgo (migracao pendente ou sem acesso): ${TEM}"
|
||||
continue
|
||||
fi
|
||||
if SAIDA="$(psql -v ON_ERROR_STOP=1 -d "${DB}" -Atc "select tabela || '=' || apagados from ${SCHEMA}.expurgar_trilhas_vencidas()" 2>&1)"; then
|
||||
echo "${DB} ${SCHEMA}: $(echo "${SAIDA}" | tr '\n' ' ')"
|
||||
else
|
||||
echo "ERRO ${DB} ${SCHEMA}: ${SAIDA}" >&2
|
||||
FALHOU=1
|
||||
fi
|
||||
done
|
||||
done
|
||||
exit ${FALHOU}
|
||||
---
|
||||
apiVersion: batch/v1
|
||||
kind: CronJob
|
||||
metadata:
|
||||
name: expurgo-trilha
|
||||
namespace: escolinha-prod
|
||||
spec:
|
||||
schedule: "20 5 * * 0"
|
||||
timeZone: America/Sao_Paulo
|
||||
concurrencyPolicy: Forbid
|
||||
successfulJobsHistoryLimit: 3
|
||||
failedJobsHistoryLimit: 3
|
||||
jobTemplate:
|
||||
spec:
|
||||
activeDeadlineSeconds: 1800
|
||||
backoffLimit: 1
|
||||
template:
|
||||
spec:
|
||||
restartPolicy: OnFailure
|
||||
containers:
|
||||
- name: expurgar
|
||||
image: postgres:16
|
||||
imagePullPolicy: IfNotPresent
|
||||
command: ["/bin/sh", "/script/expurgar.sh"]
|
||||
env:
|
||||
- { name: PGHOST, value: "postgres" }
|
||||
- { name: BANCOS, value: "athleticmap" }
|
||||
- { name: PGUSER, value: "expurgo_trilha" }
|
||||
- name: PGPASSWORD
|
||||
valueFrom:
|
||||
secretKeyRef: { name: pg-expurgo-trilha, key: password }
|
||||
resources:
|
||||
requests: { cpu: 10m, memory: 32Mi }
|
||||
limits: { cpu: 200m, memory: 128Mi }
|
||||
volumeMounts:
|
||||
- name: script
|
||||
mountPath: /script
|
||||
volumes:
|
||||
- name: script
|
||||
configMap:
|
||||
name: expurgo-trilha
|
||||
defaultMode: 0555
|
||||
@@ -21,9 +21,10 @@
|
||||
# 3. Tenant cujo banco ainda nao tem a V020/V011 aparece como "sem a funcao":
|
||||
# nao e erro (nao ha o que expurgar com o trigger antigo), e a fase `grants`
|
||||
# tem de rodar de novo depois que ele migrar.
|
||||
# 4. Tenant antigo com Postgres PROPRIO (tenants/<t>/10-postgres.yaml), se
|
||||
# algum ainda existir, NAO e coberto por este job: precisa do papel e de um
|
||||
# job apontando para ele.
|
||||
# 4. Postgres PROPRIO (escolinha-prod; e o da propria plataforma, com captacao
|
||||
# e financeiro) NAO entra neste job: cada um tem o seu — tenants/escolinha/57-
|
||||
# e tenants/plataforma/59-cronjob-expurgo-trilha-proprio.yaml — com BANCOS
|
||||
# fixo em `athleticmap`, papel e Secret proprios (decisao do dono, 30/09/2026).
|
||||
#
|
||||
# Semanal: o prazo e de anos, e a primeira linha so vence em 2031.
|
||||
# =============================================================================
|
||||
@@ -37,8 +38,12 @@ data:
|
||||
#!/bin/sh
|
||||
set -u
|
||||
: "${PGPASSWORD:?falta PGPASSWORD (Secret pg-expurgo-trilha)}"
|
||||
BANCOS="$(psql -d postgres -Atc "select datname from pg_database where datname like 'athleticmap\_%' order by 1")" \
|
||||
|| { echo "ERRO: nao consegui listar os bancos." >&2; exit 1; }
|
||||
# BANCOS vem fixo (Postgres PROPRIO de um namespace: so `athleticmap`) ou e
|
||||
# descoberto (compartilhado: todo `athleticmap_%`).
|
||||
if [ -z "${BANCOS:-}" ]; then
|
||||
BANCOS="$(psql -d postgres -Atc "select datname from pg_database where datname like 'athleticmap\_%' order by 1")" \
|
||||
|| { echo "ERRO: nao consegui listar os bancos." >&2; exit 1; }
|
||||
fi
|
||||
[ -n "${BANCOS}" ] || { echo "ERRO: nenhum banco athleticmap_* encontrado." >&2; exit 1; }
|
||||
FALHOU=0
|
||||
for DB in ${BANCOS}; do
|
||||
|
||||
@@ -0,0 +1,50 @@
|
||||
# =============================================================================
|
||||
# P6.4 no Postgres PROPRIO da plataforma (captacao + servico-financeiro das notas
|
||||
# da Athletic Map, que tem `financeiro.acesso_auditoria`). O 57- varre so o
|
||||
# pg-compartilhado; este aponta para o `postgres` deste namespace, com BANCOS
|
||||
# fixo em `athleticmap` e o Secret `pg-expurgo-trilha-proprio` (papel criado e
|
||||
# selado em 30/09/2026). Reusa o ConfigMap `expurgo-trilha` do 57-. O banco nao
|
||||
# tem o schema cadastro: o script avisa "sem a funcao" e segue — esperado.
|
||||
# Domingo 05:30, depois do expurgo do compartilhado (05:10).
|
||||
# =============================================================================
|
||||
apiVersion: batch/v1
|
||||
kind: CronJob
|
||||
metadata:
|
||||
name: expurgo-trilha-proprio
|
||||
namespace: plataforma-prod
|
||||
spec:
|
||||
schedule: "30 5 * * 0"
|
||||
timeZone: America/Sao_Paulo
|
||||
concurrencyPolicy: Forbid
|
||||
successfulJobsHistoryLimit: 3
|
||||
failedJobsHistoryLimit: 3
|
||||
jobTemplate:
|
||||
spec:
|
||||
activeDeadlineSeconds: 1800
|
||||
backoffLimit: 1
|
||||
template:
|
||||
spec:
|
||||
restartPolicy: OnFailure
|
||||
containers:
|
||||
- name: expurgar
|
||||
image: postgres:16
|
||||
imagePullPolicy: IfNotPresent
|
||||
command: ["/bin/sh", "/script/expurgar.sh"]
|
||||
env:
|
||||
- { name: PGHOST, value: "postgres" }
|
||||
- { name: BANCOS, value: "athleticmap" }
|
||||
- { name: PGUSER, value: "expurgo_trilha" }
|
||||
- name: PGPASSWORD
|
||||
valueFrom:
|
||||
secretKeyRef: { name: pg-expurgo-trilha-proprio, key: password }
|
||||
resources:
|
||||
requests: { cpu: 10m, memory: 32Mi }
|
||||
limits: { cpu: 200m, memory: 128Mi }
|
||||
volumeMounts:
|
||||
- name: script
|
||||
mountPath: /script
|
||||
volumes:
|
||||
- name: script
|
||||
configMap:
|
||||
name: expurgo-trilha
|
||||
defaultMode: 0555
|
||||
Reference in New Issue
Block a user