Terraform Provider Overview

The official DanubeData Terraform provider allows you to manage your cloud infrastructure using Infrastructure as Code (IaC). Deploy VPS instances, databases, caches, storage buckets, and more with version-controlled, reproducible configurations.

Why Use Terraform?

  • Version Control: Track infrastructure changes in Git alongside your application code
  • Reproducible Deployments: Deploy identical environments across dev, staging, and production
  • Team Collaboration: Share configurations and collaborate with pull requests
  • Drift Detection: Detect and fix configuration drift automatically
  • Cost Visibility: Preview costs before deployment with terraform plan

Quick Start

1. Install Terraform

Download and install Terraform from terraform.io:

Bash
# macOS with Homebrew
brew tap hashicorp/tap
brew install hashicorp/tap/terraform

# Ubuntu/Debian
wget -O- https://apt.releases.hashicorp.com/gpg | sudo gpg --dearmor -o /usr/share/keyrings/hashicorp-archive-keyring.gpg
echo "deb [signed-by=/usr/share/keyrings/hashicorp-archive-keyring.gpg] https://apt.releases.hashicorp.com $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/hashicorp.list
sudo apt update && sudo apt install terraform

# Verify installation
terraform version

2. Get Your API Token

  1. Log in to your DanubeData dashboard
  2. Navigate to Settings > API Tokens
  3. Click Create New Token
  4. Select the permissions you need (at minimum: read/write for resources you want to manage)
  5. Copy the token - it's shown only once!

3. Configure the Provider

Create a new directory for your Terraform configuration:

Bash
mkdir my-infrastructure
cd my-infrastructure

Create a main.tf file:

HCL
terraform {
  required_providers {
    danubedata = {
      source  = "AdrianSilaghi/danubedata"
      version = "~> 0.1"
    }
  }
}

provider "danubedata" {
  # API token is read from DANUBEDATA_API_TOKEN environment variable
}

Set your API token as an environment variable:

Bash
export DANUBEDATA_API_TOKEN="your-api-token-here"

4. Initialize and Apply

Bash
# Initialize the provider
terraform init

# Preview changes
terraform plan

# Apply changes
terraform apply

Provider Configuration

The provider supports the following configuration options:

AttributeTypeRequiredDescription
api_tokenstringYesYour DanubeData API token. Can also be set via DANUBEDATA_API_TOKEN environment variable.
base_urlstringNoAPI endpoint URL. Defaults to https://danubedata.ro/api/v1. Can be set via DANUBEDATA_BASE_URL environment variable.

Authentication Methods

Recommended: Environment Variable

Bash
export DANUBEDATA_API_TOKEN="your-api-token"
HCL
provider "danubedata" {}

Alternative: Direct Configuration (not recommended for production)

HCL
provider "danubedata" {
  api_token = "your-api-token"  # Don't commit this to version control!
}

Using Terraform Variables

HCL
variable "danubedata_token" {
  type      = string
  sensitive = true
}

provider "danubedata" {
  api_token = var.danubedata_token
}

Then set the variable:

Bash
export TF_VAR_danubedata_token="your-api-token"

Available Resources

The provider includes 9 resource types:

ResourceDescription
danubedata_vpsVirtual machines with shared or dedicated CPU
danubedata_databaseManaged MySQL, PostgreSQL, and MariaDB databases
danubedata_cacheRedis, Valkey, and Dragonfly cache instances
danubedata_storage_bucketS3-compatible object storage buckets
danubedata_storage_access_keyAccess keys for object storage
danubedata_ssh_keySSH keys for VPS authentication
danubedata_serverlessKnative-based serverless containers
danubedata_firewallNetwork security rules
danubedata_vps_snapshotPoint-in-time VPS backups

See Terraform Resources for detailed documentation.

Available Data Sources

The provider includes 4 data sources for querying existing resources:

Data SourceDescription
danubedata_vps_imagesList available OS images
danubedata_cache_providersList available cache providers
danubedata_database_providersList available database engines
danubedata_ssh_keysList existing SSH keys

See Terraform Data Sources for detailed documentation.

Supported Datacenters

All resources can be deployed to the following datacenters:

CodeLocationCountry
fsn1FalkensteinGermany
nbg1NurembergGermany
hel1HelsinkiFinland
ashAshburnUSA

State Management

Terraform tracks your infrastructure state in a state file. For team collaboration, use a remote backend:

Using DanubeData Object Storage as Backend

HCL
terraform {
  backend "s3" {
    bucket                      = "terraform-state"
    key                         = "my-project/terraform.tfstate"
    region                      = "eu-central-1"
    endpoint                    = "https://s3.danubedata.ro"
    skip_credentials_validation = true
    skip_metadata_api_check     = true
    skip_region_validation      = true
    force_path_style            = true
  }
}

Set S3 credentials:

Bash
export AWS_ACCESS_KEY_ID="your-access-key"
export AWS_SECRET_ACCESS_KEY="your-secret-key"

Importing Existing Resources

You can import existing DanubeData resources into Terraform management:

Bash
# Import a VPS instance
terraform import danubedata_vps.my_server 12345

# Import a database
terraform import danubedata_database.my_db 67890

# Import a storage bucket
terraform import danubedata_storage_bucket.my_bucket abc123

Find resource IDs in the DanubeData dashboard or via the API.

Best Practices

Use Variables for Environment-Specific Values

HCL
variable "environment" {
  type    = string
  default = "dev"
}

variable "datacenter" {
  type    = string
  default = "fsn1"
}

resource "danubedata_vps" "app" {
  name       = "${var.environment}-app-server"
  datacenter = var.datacenter
  # ...
}

Use Workspaces for Multiple Environments

Bash
# Create workspaces
terraform workspace new dev
terraform workspace new staging
terraform workspace new production

# Switch workspaces
terraform workspace select staging

Mark Sensitive Outputs

HCL
output "database_password" {
  value     = danubedata_database.main.password
  sensitive = true
}

Use Terraform Cloud for Team Collaboration

For larger teams, consider using Terraform Cloud for:

  • Remote state management
  • Policy enforcement
  • VCS integration
  • Cost estimation

Troubleshooting

Authentication Errors

If you see "401 Unauthorized":

  1. Verify your API token is correct
  2. Check the token has the required permissions
  3. Ensure the DANUBEDATA_API_TOKEN environment variable is set

Provider Not Found

If Terraform can't find the provider:

Bash
terraform init -upgrade

Resource Timeouts

For long-running operations, configure timeouts:

HCL
resource "danubedata_vps" "app" {
  # ...

  timeouts {
    create = "10m"
    update = "10m"
    delete = "5m"
  }
}

Next Steps

Support