Provider Terraform
Providerul Terraform Elido - terraform-provider-elido - îți permite să
gestionezi link-urile scurte în același fel ca restul infrastructurii:
declarativ, în controlul versiunilor, cu semantică plan / apply
și detectarea drift-ului.
Providerul este un adaptor subțire peste API-ul REST public. Orice
poți exprima în elido_link poți exprima și prin SDK sau
printr-un curl către api-core; Terraform îți oferă doar un contract
stabil de ciclu de viață deasupra.
Când să-l folosești
- Redirecționările de marketing aparțin infrastructurii tale. DNS Cloudflare, landing-ul S3, distribuția CloudFront, și link-ul scurt care trimite spre landing trăiesc toate în același modul Terraform. Ștergi landing-ul → redirecționarea dispare odată cu el.
- Link-uri de campanie în masă dintr-un șablon. Un
for_eachpeste canale × regiuni produce zeci de link-uri etichetate consecvent într-un singurterraform apply. - Onboarding multi-tenant. Dacă provizionezi tenanți cu
Terraform, adaugă o resursă
elido_linkîn modul și fiecare tenant are redirecționările lui de brand din prima zi.
Dacă singura ta nevoie este “creează un link dintr-un script”, folosește
SDK-ul Go sau un curl. Terraform este pentru cazul în care
vrei ca un ciclu de viață să fie gestionat.
Status
v0.1.0 MVP, compilat din sursă (vezi Instalare). Suprafața de astăzi:
| Tip | Nume | Endpoint |
|---|---|---|
| Resource | elido_link | POST /v1/workspaces/{id}/links (+ PATCH / DELETE) |
| Resource | elido_custom_domain | creare / ștergere / import prin API-ul de domenii |
| Sursă date | elido_workspace | GET /v1/workspaces/{id} |
| Sursă date | elido_custom_domain | GET /v1/workspaces/{id}/domains (filtrat local) |
elido_custom_domain înregistrează domeniul și, implicit, așteaptă
până trece verificarea DNS (wait_for_verified, verify_timeout,
implicit 10m). La expirarea timpului returnează verify_token, ca să poți
publica înregistrarea TXT lipsă. Importă cu
<workspace_id>:<domain_id>.
Planificat. Resursele
elido_folderșielido_api_keynu sunt încă în provider. Providerul nu este publicat în Terraform Registry și nu are o versiune stabilă. ADR-0034 conține lista completă a lucrărilor amânate.
Instalare
Providerul nu este încă publicat în Terraform Registry. Până când va fi,
instalează prin dev_overrides:
git clone https://github.com/elidoapp/elido.git
cd elido/tools/terraform-provider-elido
make install-localApoi adaugă un bloc dev_overrides în ~/.terraformrc:
provider_installation {
dev_overrides {
"elidoapp/elido" = "/Users/<you>/.terraform.d/plugins/elidoapp/elido"
}
direct {}
}Cu dev_overrides, terraform init nu este necesar - plan
și apply rezolvă direct binarul.
Configurare
terraform {
required_providers {
elido = {
source = "elidoapp/elido"
version = "~> 0.1"
}
}
}
provider "elido" {
# api_url defaults to https://api.elido.app
# api_token reads ELIDO_API_TOKEN
}export ELIDO_API_TOKEN=ek_...| Atribut | Valoare env alternativă | Implicit |
|---|---|---|
api_url | ELIDO_API_URL | https://api.elido.app |
api_token | ELIDO_API_TOKEN | obligatoriu |
Pentru Elido găzduit local, indică api_url spre api-core. Token-urile se
creează la /dashboard/settings/api-keys.
Primul tău link
data "elido_workspace" "main" {
id = 42
}
resource "elido_link" "spring_campaign" {
workspace_id = data.elido_workspace.main.id
domain_id = 1
slug = "spring-2026"
destination_url = "https://example.com/landing/spring"
title = "Spring 2026 email campaign"
tags = ["spring-2026", "email"]
redirect_status = 301
}terraform plan
terraform applyProviderul indexează state-ul după id-ul numeric al link-ului, deci redenumirea
eticheta resursei Terraform sau schimbarea slug-ului nu forțează
înlocuirea - se trimite un PATCH. Schimbarea workspace_id sau
domain_id forțează însă înlocuirea (link-ul aparține unei alte
rute edge).
Link-uri în masă
locals {
channels = ["email", "twitter", "linkedin", "reddit", "hn"]
regions = ["us", "eu", "apac", "latam"]
}
resource "elido_link" "campaign_launch" {
for_each = {
for pair in setproduct(local.channels, local.regions) :
"${pair[0]}-${pair[1]}" => pair
}
workspace_id = data.elido_workspace.main.id
domain_id = 1
slug = "launch-${each.key}"
destination_url = "https://example.com/launch?ch=${each.value[0]}&r=${each.value[1]}"
tags = ["launch-2026", each.value[0], each.value[1]]
}20 de link-uri, un singur apply. Șterge blocul și terraform apply
le elimină într-o singură tranzacție.
Importul link-urilor existente
Ai deja link-uri pe care vrei să le pui sub gestiunea Terraform? Folosește
formatul <workspace_id>:<link_id>:
terraform import elido_link.spring_campaign 42:7Un terraform plan ulterior arată drift-ul dintre link-ul live
și HCL-ul tău - converge fie actualizând HCL-ul, fie lăsând
apply să împingă starea HCL către API.
Referință
Resursă - elido_link
| Atribut | Type | Obligatoriu | Note |
|---|---|---|---|
workspace_id | number | da | Forțează înlocuirea la modificare. |
domain_id | number | da | Forțează înlocuirea la modificare. |
slug | string | nu | Generat automat când este gol. |
destination_url | string | da | |
title | string | nu | |
tags | list | nu | Ordinea contează în diferența de plan. |
redirect_status | number | nu | 301 / 302 / 307 / 308. Implicit 302. |
show_splash | bool | nu | |
status | string | nu | active, paused, archived. Implicit active. |
id | string | calculat | ID numeric, formatat ca string pentru stabilitate TF. |
created_at | string | calculat | RFC3339. |
updated_at | string | calculat | RFC3339. |
Sursă de date - elido_custom_domain
Caută un domeniu personalizat de redirecționare după hostname în cadrul unui workspace. Folosește
id-ul rezultat ca domain_id în resursele elido_link.
data "elido_custom_domain" "links" {
workspace_id = data.elido_workspace.main.id
hostname = "links.example.com"
}
resource "elido_link" "spring_campaign" {
workspace_id = data.elido_workspace.main.id
domain_id = data.elido_custom_domain.links.id
destination_url = "https://example.com/landing/spring"
slug = "spring-2026"
}| Atribut | Type | Obligatoriu | Note |
|---|---|---|---|
workspace_id | number | da | Workspace-ul care deține domeniul. |
hostname | string | da | FQDN; wildcard-urile păstrează prefixul *.. |
id | number | calculat | Transmite-l la elido_link.domain_id. |
status | string | calculat | pending, verified, active, failed. |
is_wildcard | bool | calculat | |
verify_token | string | calculat | Sensibil. Gol după verificare. |
created_at | string | calculat | |
verified_at | string | calculat | |
failed_at | string | calculat | |
fail_reason | string | calculat |
Sursă de date - elido_workspace
| Atribut | Type | Obligatoriu | Note |
|---|---|---|---|
id | number | da | Cheie de căutare. |
name | string | calculat | |
slug | string | calculat | |
plan_tier | string | calculat | free, paid, business. |
created_at | string | calculat | |
updated_at | string | calculat |
Unde raportezi probleme
Bug-uri, lacune în schemă sau “vreau resursa X” - deschide un issue la
github.com/elidoapp/elido cu
eticheta area:terraform.