Seu primeiro run
Este é o fluxo pela API num Firstlume já instalado: uma pasta, variáveis herdadas, um stack e um apply que você revisa e aprova. Tudo aqui também pode ser feito pela UI.
O que você precisa
Um repositório Git com uma pasta que tenha .firstlume/config.yaml. O Firstlume roda o código a partir dessa pasta:
examples/hello/
├── .firstlume/config.yaml
└── main.tf
# .firstlume/config.yaml
version: 1
engine: terraform
engine_version: 1.15.6
# main.tf
terraform {
backend "http" {}
}
variable "greeting" {
type = string
default = "hello"
}
resource "terraform_data" "hello" {
input = var.greeting
}
O bloco vazio backend "http" é obrigatório: é ele que deixa o state no Firstlume. Veja Backend de state.
Prepare o terminal
Pegue o token admin no Secret da release. A organização default é criada na subida, e o agent instalado pelo chart pertence a ela.
export FIRSTLUME_ADMIN_TOKEN=$(kubectl -n firstlume get secret firstlume-control-plane \
-o jsonpath='{.data.admin-token}' | base64 -d)
H="Authorization: Bearer $FIRSTLUME_ADMIN_TOKEN"
O=https://firstlume.example.com/api/v1/orgs/default
1. Crie uma pasta
Pastas são opcionais: stacks também podem ficar na raiz da organização.
F=$(curl -s -H "$H" $O/folders -d '{"name": "infra"}' | jq -r .id)
2. Defina variáveis e segredos
Os stacks abaixo dessa pasta herdam tudo.
curl -s -X PUT -H "$H" $O/folders/$F/settings -d '{
"require_approval": true,
"variables": [
{"key": "greeting", "category": "terraform", "value": "olá"},
{"key": "AWS_SECRET_ACCESS_KEY", "category": "env", "sensitive": true, "value": "..."}
]
}'
Variáveis terraform viram TF_VAR_greeting. Variáveis env viram variáveis de ambiente. Valores sensíveis são cifrados, mascarados nos logs e nunca são devolvidos pela API.
3. Crie o stack
path é a pasta do repositório que contém .firstlume/config.yaml.
ST=$(curl -s -H "$H" $O/stacks -d "{
\"folder_id\": \"$F\", \"name\": \"hello\",
\"repository\": \"https://github.com/sua-org/infra.git\", \"path\": \"examples/hello\"
}" | jq -r .id)
Para um repositório privado, mande também git_token. Com uma conexão Git, você escolhe os repositórios da conta em vez de digitar URLs.
4. Dispare um apply e acompanhe os logs
Os logs chegam ao vivo, por SSE. O stream termina quando o run para na aprovação.
RUN=$(curl -s -H "$H" $O/stacks/$ST/runs -d '{"type": "apply"}' | jq -r .id)
curl -N -H "$H" "$O/runs/$RUN/logs?follow=true"
5. Revise e aprove
Veja o que muda, recurso por recurso, e aprove:
curl -s -H "$H" $O/runs/$RUN/changes | jq .
curl -s -X POST -H "$H" $O/runs/$RUN/approve -d '{"acknowledged": []}'
acknowledged lista os endereços que você confirma quando o stack exige confirmar cada exclusão ou recriação. Aqui fica vazio.
O apply roda então num novo Job e grava a primeira versão do state. Um novo plan não mostra mudanças.
Na UI
Abra https://firstlume.example.com e escolha "Usar token admin". A pasta e o stack estão na árvore, e a página do run mostra os passos, as mudanças e os logs.
Próximos passos
- Defina uma verificação de drift na pasta
- Declare arquivos e variáveis no repositório
- Importe o state que você já tem