# linode/terraform-provider-linode architecture

> Architecture diagram of the GitHub repository linode/terraform-provider-linode, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-28). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/linode/terraform-provider-linode
- Repository: https://github.com/linode/terraform-provider-linode

## Overview

This is a Terraform provider for provisioning and querying Linode cloud infrastructure. The principal workflow runs from Terraform configuration through the provider protocol and registered resource or data-source handlers, which translate Terraform values into Linode API requests and return results for Terraform state. The tree shows broad coverage across compute, networking, managed services, object storage, and account capabilities. Sampled source confirms instance, database, and bucket operations; wiring for other resource families is inferred only at the provider registration level, so their individual API call paths are not expanded here.

Main entry points: [`linode/framework_provider.go`](https://github.com/linode/terraform-provider-linode/blob/dev/linode/framework_provider.go) (Framework provider), [`main.go`](https://github.com/linode/terraform-provider-linode/blob/dev/main.go) (Protocol server), [`linode/databasepostgresqlv2/framework_resource.go`](https://github.com/linode/terraform-provider-linode/blob/dev/linode/databasepostgresqlv2/framework_resource.go) (PostgreSQL databases), [`linode/instance/resource.go`](https://github.com/linode/terraform-provider-linode/blob/dev/linode/instance/resource.go) (Instances)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_entry["Provider entry"]
  node_server["Protocol server<br/>[main.go]"]
  node_framework["Framework provider"]
  node_sdkprovider["SDK provider<br/>[provider.go]"]
end

subgraph group_compute["Compute and Kubernetes"]
  node_instance["Instances<br/>[resource.go]"]
  node_lke["Kubernetes clusters<br/>[cluster.go]"]
  node_instanceparts["Instance disks and config<br/>[resource.go]"]
end

subgraph group_network["Networking and security"]
  node_networking["VPC and IP"]
  node_firewall["Firewalls"]
  node_domains["Domains and DNS"]
end

subgraph group_services["Managed services"]
  node_mysql["MySQL databases"]
  node_postgres["PostgreSQL databases"]
  node_databasecatalog["Database catalog"]
  node_objectstorage["Object storage<br/>[resource.go]"]
  node_monitoring["Monitoring and logs"]
  node_accountiam["Account and IAM"]
end

subgraph group_shared["Provider support"]
  node_helpers["Shared helpers"]
end

node_terraform(("Terraform"))
node_linodeapi{{"Linode API"}}

node_terraform -->|"configures provider"| node_server
node_server -->|"serves protocol"| node_framework
node_server -->|"muxes protocol"| node_sdkprovider
node_framework -->|"registers resources"| node_instance
node_framework -->|"registers resources"| node_lke
node_framework -->|"registers resources"| node_instanceparts
node_framework -->|"registers resources"| node_networking
node_framework -->|"registers resources"| node_firewall
node_framework -->|"registers resources"| node_domains
node_framework -->|"registers resources"| node_mysql
node_framework -->|"registers resources"| node_postgres
node_framework -->|"registers resources"| node_databasecatalog
node_framework -->|"registers resources"| node_objectstorage
node_framework -->|"registers resources"| node_monitoring
node_framework -->|"registers resources"| node_accountiam
node_instance -->|"creates and updates"| node_linodeapi
node_lke -->|"manages clusters"| node_linodeapi
node_mysql -->|"manages databases"| node_linodeapi
node_postgres -->|"manages databases"| node_linodeapi
node_objectstorage -->|"manages buckets"| node_linodeapi
node_databasecatalog -->|"uses shared logic"| node_helpers
node_postgres -->|"uses shared logic"| node_helpers
node_linodeapi -->|"returns resource data"| node_terraform

click node_server "https://github.com/linode/terraform-provider-linode/blob/dev/main.go"
click node_framework "https://github.com/linode/terraform-provider-linode/blob/dev/linode/framework_provider.go"
click node_sdkprovider "https://github.com/linode/terraform-provider-linode/blob/dev/linode/provider.go"
click node_instance "https://github.com/linode/terraform-provider-linode/blob/dev/linode/instance/resource.go"
click node_lke "https://github.com/linode/terraform-provider-linode/blob/dev/linode/lke/cluster.go"
click node_instanceparts "https://github.com/linode/terraform-provider-linode/blob/dev/linode/instanceconfig/resource.go"
click node_networking "https://github.com/linode/terraform-provider-linode/tree/dev/linode/vpc"
click node_firewall "https://github.com/linode/terraform-provider-linode/tree/dev/linode/firewall"
click node_domains "https://github.com/linode/terraform-provider-linode/tree/dev/linode/domain"
click node_mysql "https://github.com/linode/terraform-provider-linode/blob/dev/linode/databasemysqlv2/framework_resource.go"
click node_postgres "https://github.com/linode/terraform-provider-linode/blob/dev/linode/databasepostgresqlv2/framework_resource.go"
click node_databasecatalog "https://github.com/linode/terraform-provider-linode/tree/dev/linode/databaseengines"
click node_objectstorage "https://github.com/linode/terraform-provider-linode/blob/dev/linode/objbucket/resource.go"
click node_monitoring "https://github.com/linode/terraform-provider-linode/tree/dev/linode/monitoralertdefinition"
click node_accountiam "https://github.com/linode/terraform-provider-linode/tree/dev/linode/iamuser"
click node_helpers "https://github.com/linode/terraform-provider-linode/tree/dev/linode/helper"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_server,node_framework,node_sdkprovider toneBlue
class node_instance,node_lke,node_instanceparts toneAmber
class node_networking,node_firewall,node_domains,node_linodeapi toneMint
class node_mysql,node_postgres,node_databasecatalog,node_objectstorage,node_monitoring,node_accountiam toneRose
class node_helpers,node_terraform toneIndigo
```

## Components

### Provider entry

- [Protocol server](https://github.com/linode/terraform-provider-linode/blob/dev/main.go): `main.go`
- [Framework provider](https://github.com/linode/terraform-provider-linode/blob/dev/linode/framework_provider.go): `linode/framework_provider.go`
- [SDK provider](https://github.com/linode/terraform-provider-linode/blob/dev/linode/provider.go): `linode/provider.go`

### Compute and Kubernetes

- [Instances](https://github.com/linode/terraform-provider-linode/blob/dev/linode/instance/resource.go): `linode/instance/resource.go`
- [Kubernetes clusters](https://github.com/linode/terraform-provider-linode/blob/dev/linode/lke/cluster.go): `linode/lke/cluster.go`
- [Instance disks and config](https://github.com/linode/terraform-provider-linode/blob/dev/linode/instanceconfig/resource.go): `linode/instanceconfig/resource.go`

### Networking and security

- [VPC and IP](https://github.com/linode/terraform-provider-linode/tree/dev/linode/vpc): `linode/vpc`
- [Firewalls](https://github.com/linode/terraform-provider-linode/tree/dev/linode/firewall): `linode/firewall`
- [Domains and DNS](https://github.com/linode/terraform-provider-linode/tree/dev/linode/domain): `linode/domain`

### Managed services

- [MySQL databases](https://github.com/linode/terraform-provider-linode/blob/dev/linode/databasemysqlv2/framework_resource.go): `linode/databasemysqlv2/framework_resource.go`
- [PostgreSQL databases](https://github.com/linode/terraform-provider-linode/blob/dev/linode/databasepostgresqlv2/framework_resource.go): `linode/databasepostgresqlv2/framework_resource.go`
- [Database catalog](https://github.com/linode/terraform-provider-linode/tree/dev/linode/databaseengines): `linode/databaseengines`
- [Object storage](https://github.com/linode/terraform-provider-linode/blob/dev/linode/objbucket/resource.go): `linode/objbucket/resource.go`
- [Monitoring and logs](https://github.com/linode/terraform-provider-linode/tree/dev/linode/monitoralertdefinition): `linode/monitoralertdefinition`
- [Account and IAM](https://github.com/linode/terraform-provider-linode/tree/dev/linode/iamuser): `linode/iamuser`

### Provider support

- [Shared helpers](https://github.com/linode/terraform-provider-linode/tree/dev/linode/helper): `linode/helper`

### Other components

- **Terraform**
- **Linode API**

## Connections

- Terraform → Protocol server: configures provider
- Protocol server → Framework provider: serves protocol
- Protocol server → SDK provider: muxes protocol
- Framework provider → Instances: registers resources
- Framework provider → Kubernetes clusters: registers resources
- Framework provider → Instance disks and config: registers resources
- Framework provider → VPC and IP: registers resources
- Framework provider → Firewalls: registers resources
- Framework provider → Domains and DNS: registers resources
- Framework provider → MySQL databases: registers resources
- Framework provider → PostgreSQL databases: registers resources
- Framework provider → Database catalog: registers resources
- Framework provider → Object storage: registers resources
- Framework provider → Monitoring and logs: registers resources
- Framework provider → Account and IAM: registers resources
- Instances → Linode API: creates and updates
- Kubernetes clusters → Linode API: manages clusters
- MySQL databases → Linode API: manages databases
- PostgreSQL databases → Linode API: manages databases
- Object storage → Linode API: manages buckets
- Database catalog → Shared helpers: uses shared logic
- PostgreSQL databases → Shared helpers: uses shared logic
- Linode API → Terraform: returns resource data
