Gerenciamento de Tenants¶
Guia passo a passo para criar, manter e remover tenants nos ambientes HML e NOX.
Criar Novo Tenant¶
Banco Compartilhado (Shared)¶
Para tenants que compartilham o banco de dados existente:
- Acesse GitHub Actions do repositório
ads-oci-infra-pipeline - Execute o workflow "01 Tenant → Criar Nova APP Config" com os inputs:
| Input | Exemplo | Descrição |
|---|---|---|
tenant_name |
novotenante |
Nome do tenant (lowercase, sem espaços) |
description |
Hospital X |
Descrição do tenant |
environment |
hml |
Ambiente: hml ou nox |
source_tenant |
template |
Tenant de origem para copiar secrets e configs |
applications |
auth-api,is-core-api,... |
Apps a configurar (separadas por vírgula) |
database_type |
shared |
Banco compartilhado |
-
O workflow:
- Cria arquivo
.hclemconfig/{env}/tenants/ - Copia secrets do Vault do tenant de origem
- Abre PR no repositório de infra com labels
new_tenant,tenant=X,env=Y - Dispara preview do Terraform
- Abre PR no
ads-tenants-configcom configs de app
- Cria arquivo
-
Revise e aprove o PR de infra → merge → deploy
- Revise e aprove o PR de tenants-config → merge → ArgoCD sync
Banco Dedicado (Dedicated)¶
Para tenants que precisam de banco de dados próprio:
Passo 0 — Infraestrutura do banco:
- Execute workflow "00 Tenant → Criar Novo Dedicado":
| Input | Exemplo | Descrição |
|---|---|---|
tenant_name |
novotenante |
Nome do tenant |
description |
Hospital X |
Descrição |
environment |
hml |
Ambiente |
enable_replica |
false |
Habilitar réplica de leitura |
enable_backup |
true |
Habilitar backup automático |
ocpus |
2 |
OCPUs do PostgreSQL |
memory |
32 |
Memória em GB |
data_volume_size |
100 |
Volume de dados em GB |
- Revise PR → merge → deploy cria infraestrutura do banco (PostgreSQL 16 + 9.6)
Passo 1 — Config de aplicação:
- Execute workflow "01 Tenant → Criar Nova APP Config" com
database_type: dedicated - Mesmo fluxo do banco compartilhado a partir daqui
flowchart TB
A{Tipo de Banco?}
A -->|Shared| B[01: Criar APP Config]
A -->|Dedicated| C[00: Criar Dedicado]
C --> D[PR Infra → Merge → Deploy DB]
D --> B
B --> E[PR Infra + PR Tenants Config]
E --> F[Merge Infra PR]
F --> G[Merge Tenants Config PR]
G --> H[ArgoCD Sync Automático]
Manutenção de Tenant¶
Atualizar Versão de Aplicação¶
HML (automático): O merge pipeline atualiza automaticamente todos os tenants HML.
NOX (manual):
- Edite
tenants/oci/nox/{tenant}/{app}/values.yaml:yaml image: tag: v8.0.0@sha256:abc123... - Commit e push para
main - ArgoCD sincroniza automaticamente
Alterar Versão do Chart¶
Se uma nova versão do Helm chart precisar ser adotada:
- Edite
app-config.yamldo tenant/app:yaml chartVersion: 2.0.0 - Commit e push para
main
Chart version é global por tenant/app
Ao mudar a chartVersion, verifique se os values.yaml são compatíveis com a nova versão do chart.
Bloquear Deploy Temporariamente¶
Para manutenções que exigem parar o auto-sync:
-
Execute workflow "02 Tenant → Desativar Auto-Sync":
- Selecione o ambiente e tenant
- O ApplicationSet será patcheado removendo o sync automático
- Os deployments do tenant serão deletados
-
Realize a manutenção necessária
-
Execute workflow "03 Tenant → Re-Ativar Auto-Sync":
- O ApplicationSet será restaurado com auto-sync
- O ArgoCD recriará os deployments
Remover Tenant¶
Remove do ads-tenants-config¶
- Delete o diretório do tenant:
bash rm -rf tenants/oci/{env}/{tenant}/ - Commit e push para
main - O ArgoCD detecta a remoção e com
prune: truedeleta automaticamente os recursos do cluster
Remover do ads-oci-infra-pipeline¶
- Delete o arquivo
.hcldo tenant emconfig/{env}/tenants/ - Crie PR → preview → merge → Terraform destroy dos recursos de infra
Ordem importa
Remova primeiro do ads-tenants-config (para o ArgoCD parar de deployar) e depois do ads-oci-infra-pipeline (para destruir a infra).
Cancelar Criação de Tenant¶
Se um PR de criação de tenant for fechado sem merge:
O workflow cleanup-tenant-config.yml executa automaticamente:
- Encontra e fecha o PR relacionado no
ads-tenants-config - Deleta os secrets criados no Vault (identificados pela metadata
pr_number) - Comenta resumo de cleanup no PR
Nenhuma ação manual necessária — o cleanup é automático.
Vault e Secrets¶
Cada tenant possui secrets no HashiCorp Vault organizados por:
secret/{ENV}/tenants/{tenant}/
├── auth-api/ # Credenciais do banco, JWT secrets
├── is-core-api/ # Credenciais, configs de integração
└── ...
Na criação do tenant, os secrets são copiados do tenant de origem (source_tenant) via pipeline backup → transform → restore:
- Backup dos secrets do tenant de origem
- Transformação de paths e valores (substituição de nomes)
- Restore no novo mount do tenant
- Adição de metadata de tracking (
created_by,managed_by,pr_number)
Gerenciamento manual de secrets
Para operações manuais no Vault, use os scripts do repositório de infra:
```bash
Listar secrets de um tenant¶
./scripts/vault/vault-backup.sh -l -m secret/HML -sp tenants/meutenant
Backup de secrets¶
./scripts/vault/vault-backup.sh -b -m secret/HML -sp tenants/meutenant -o backup.json
Copiar entre tenants¶
./scripts/vault/vault-backup.sh -cp -m secret/HML -sp tenants/origem -dp tenants/destino ```