Najlepszy panel admina to brak panelu
Dashboard jest wyznaniem porażki API. Manifest dla developerów, którzy mają lepsze rzeczy do roboty niż klikać.
Wszedłeś na panel administratora. 47 zakładek. Dwanaście razy tooltipy. Trzy modały głębokie. Pięć minut później odpaliłeś wreszcie tę cholerną maszynę.
Mogłeś to zrobić jedną komendą. Ale nie miałeś API.
Manifest brak-panelu
Każdy panel admina to ucieczka od dobrego API. Jeśli możesz zrobić rzeczy z UI, a nie możesz tych samych rzeczy zrobić curlem — Twój provider zatrudnił PM-a od UX zamiast architekta API.
Dobry cloud provider:
- Każde kliknięcie w UI = HTTP request do publicznego API
- API jest source of truth, UI tylko wrapuje
- Każda akcja jest skryptowalna (curl + Terraform)
- Versioning + dokumentacja są pierwsze, UI drugie
Złe dashboardy istnieją, bo łatwiej dorzucić nową zakładkę niż przemyśleć endpoint.
Co tracisz, klikając
Klikanie skaluje się jak O(czas × ludzie). API skaluje się jak O(1). Postawienie 50 VM-ek dla testu obciążeniowego:
| Metoda | Czas | Repeatable? | Audytowalne? |
|---|---|---|---|
| Klikanie w panel | ~90 min | Nie | Nie |
| Bash + curl | ~3 min | Tak | Tak (logi shell) |
| Terraform plan/apply | ~2 min | Tak | Tak (state file + git) |
A jak coś pójdzie nie tak — jak rollbackujesz 50 klików? Nie. Z Terraformu: terraform destroy, czysta sprawa.
SimpleCloud API w 5 sekund
JWT="..."
H="Authorization: Bearer $JWT"
B="https://poland.whitesky.cloud/api/1"
# Postaw cloudspace
curl -X POST -H "$H" -H "Content-Type: application/json" \
"$B/customers/$CID/cloudspaces" \
-d '{"name":"test","location":"pl-war-dc01-002",
"private_network":"192.168.50.0/24",
"firewall":{"private":false,"external_network_id":1}}'
# Postaw VM
curl -X POST -H "$H" \
"$B/customers/$CID/cloudspaces/$CS/vms?name=app1&vcpus=2&memory=4096&disk_size=20&image_id=11"
# Stop / start kiedy potrzeba
curl -X POST -H "$H" "$B/.../vms/$VM/stop"
curl -X POST -H "$H" "$B/.../vms/$VM/start"
To wszystko. 590 endpointów — wszystko klikalne w portalu jest też w API. Cloudspace, VM, dyski, snapshots, port-forwarding, ingress, K8s, S3 buckets, IAM, billing, audit logi.
Terraform też mamy
provider "poland-whitesky-cloud" {
client_jwt = var.jwt
}
resource "poland-whitesky-cloud_cloudspace" "main" {
name = "production"
customer_id = var.cid
location = "pl-war-dc01-002"
external_network_id = 1
}
resource "poland-whitesky-cloud_machine" "web" {
count = 3
name = "web-${count.index}"
cloudspace_id = poland-whitesky-cloud_cloudspace.main.id
vcpus = 2
memory = 4096
disk_size = 50
image_id = 11
}
terraform apply → trzy VM-ki, infrastruktura jako kod, w 90 sekund.
CLI dla skryptów
poland-whitesky-cloud list-cloudspaces --json \
| jq '.[] | select(.name=="production") | .cloudspace_id'
poland-whitesky-cloud create-virtual-machine \
--cloudspace-id $CS --vcpus 2 --memory 4096
Każda komenda ma flagę --json. Pipeline z jq / xargs / GitHub Actions = naturalny.
Kiedy używać UI?
- Pierwszy raz — odkrywczo, „co tu mamy"
- Debugging produkcji o 3 w nocy — czasem szybciej kliknąć stop, niż napisać script
- Pokazania klientowi — bo klient nie czyta JSON-a
To są jedyne uzasadnione przypadki. Resztę czasu = API.
Litmus test. Wybierz jedną akcję (np. „przesuń backup retention z 7 dni na 14"). Spróbuj zrobić ją tylko przez API. Jeśli nie da się — to API jest niekompletne. Jeśli się da, ale dokumentacja Cię nie prowadzi — to API jest źle udokumentowane. Jeśli idzie gładko — masz dobrego providera.
SimpleCloud sign-off
Dajemy: REST API (590 endpointów, Swagger 2.0 spec do pobrania), oficjalny provider Terraform, CLI z --json, CSI driver dla Kubernetes. Portal jest, ale tylko żeby się zorientować i pokazać klientowi.
Ty piszesz terraform apply, my dostarczamy infrastrukturę. Tak ma działać cloud.