O bucket da organização
Por padrão, o state de todas as organizações fica no storage da instalação. Uma organização pode guardar o dela num bucket S3 próprio. O Firstlume continua sendo o backend: o protocolo, os locks, as versões, os tokens e a importação não mudam. Muda só onde o objeto é gravado.
Configure
curl -X PUT -H "Authorization: Bearer $ADMIN" -H "Content-Type: application/json" "$API/api/v1/orgs/$ORG/state-storage" -d '{
"kind": "s3", "endpoint": "https://s3.example.com", "bucket": "infra", "region": "us-east-1",
"folder": "firstlume", "access_key_id": "...", "secret_access_key": "..."
}'
O padrão de region é us-east-1, o de folder é firstlume e o de path_style é true. ca_cert é opcional, para endpoints com certificado de CA própria.
O Firstlume testa o bucket antes de salvar (grava, lê e apaga um objeto) e diz o que falhou. POST .../state-storage/check testa sem salvar; sem corpo, testa o atual.
A chave secreta nunca volta pela API. Enviada vazia, mantém a guardada.
Endpoint http:// só com controlPlane.state.allowHTTPOrgStorage: true no Helm, para um storage dentro do cluster.
O que vai para o bucket
O Firstlume usa só a pasta folder e grava nela o .firstlume, que diz de qual organização ela é. Uma pasta de outra organização é recusada. O resto do bucket não é tocado, nem pela limpeza, então duas organizações podem usar o mesmo bucket, cada uma na sua pasta.
Dentro da pasta, os nomes do Firstlume: <pastas>/<stack>/<unit>/v<número>-<id>.tfstate.enc.
firstlume/
.firstlume
infra/prod/cluster/
zone-a/node01/app/
v000012-0f2c91ab-….tfstate.enc
access/
v000004-91ab07de-….tfstate.enc
dns/records/
v000002-5d1e….tfstate.enc
Renomear não move nada: as versões novas vão para o caminho novo.
Cifrado por padrão
Com "encrypt": false e "plaintext_acknowledged": true, as versões novas vão como .tfstate, o JSON do Terraform, legível por mc ou aws s3.
Quem lê o bucket lê os segredos do state. Os providers guardam senhas, chaves e tokens nele. O storage da instalação é sempre cifrado, e esta opção só existe no bucket da organização.
Trocar de storage
Trocar de storage (ou de modo) vale para as gravações seguintes. As versões antigas continuam lidas de onde estão. {"kind": "installation"} volta ao da instalação. GET .../state-storage mostra o atual e os anteriores que ainda têm versões.
Se o bucket cair
O state responde 503 e o run falha no Init com o motivo. O servidor e as outras organizações seguem.
Planejado
- Ler a credencial do bucket no Vault
- Mover as versões existentes para o storage atual
- Uma seção para isso na tela de configurações da organização