Copy resources across environments
Use Terraform variables and workspaces to maintain identical resource configurations across environments such as preproduction and production. The configuration below uses provider v0: permanent_api_token and resource types such as gcore_cdn_resource. Provider v2 authenticates with api_key and uses different resource type names. The providerĀ overview shows both provider blocks.
Configure an APIĀ token and initializeĀ Terraform before proceeding.
Step 1. Define variables
Create a variables.tf file to declare the parameters that differ between environments. The following variables are common across all products:
// variables.tf
variable "api_token" {
description = "API token for access to your CDB account"
type = string
sensitive = true
}
variable "api_endpoint" {
description = "CDB API URL"
type = string
}
Add the resource-specific variable for the target product:
variable "cdn_resource_cname" {
description = "Custom domain of the CDN resource"
type = string
}
Step 2. Configure environment variables
Create a separate .tfvars file for each environment. The common fields are identical across products:
api_token = "your-api-token"
api_endpoint = "https://api.cdb-staging.cdn.orange.com"
Add the resource-specific value for each environment:
// preprod.tfvars
api_token = "your-preprod-api-token"
api_endpoint = "https://api.cdb-staging.cdn.orange.com"
cdn_resource_cname = "preprod.example.com"
// production.tfvars
api_token = "your-production-api-token"
api_endpoint = "https://api.cdb-staging.cdn.orange.com"
cdn_resource_cname = "prod.example.com"
Step 3. Write the resource configuration
Add the following to main.tf. The provider block is identical for all products:
terraform {
required_providers {
gcore = {
source = "G-Core/gcore"
version = ">= 0.8.20"
}
}
}
provider "gcore" {
permanent_api_token = var.api_token
api_endpoint = var.api_endpoint
}
Add the resource block for the target product:
resource "gcore_cdn_resource" "example" {
cname = var.cdn_resource_cname
origin = "example.com"
}
Step 4. Initialize Terraform
From the project directory, run:
terraform init
This downloads the CDB provider and prepares the working directory.
Step 5. Use Terraform workspaces
Terraform workspaces manage multiple environments from the same configuration ā each workspace maintains an independent state file, so changes in preprod do not affect production.
Create workspaces for preproduction and production:
terraform workspace new preprod
terraform workspace new production
Step 6. Apply the configuration
Switch to the preproduction workspace and apply the configuration:
terraform workspace select preprod
terraform apply -var-file=preprod.tfvars
Then switch to the production workspace and apply the configuration there as well:
terraform workspace select production
terraform apply -var-file=production.tfvars
The same configuration now runs in both environments, with each workspace tracking its own state independently.