Migrating Instance Pool from v0.75.x to v0.76.x
This guide covers the migration of the exoscale_instance_pool resource from provider version ~> 0.75.x to ~> 0.76.x.
Overview
Version 0.76.0 migrates the exoscale_instance_pool resource from the legacy SDKv2 implementation to the Terraform plugin framework.
As part of this migration, the service_offering argument, deprecated since v0.27.0, is removed: instance_type is now required. The instances and virtual_machines attributes become read-only.
Your Terraform state is upgraded automatically the next time you run plan or apply — no terraform state surgery, and no resources are recreated.
The exoscale_instance_pool and exoscale_instance_pool_list data sources are not affected.
~> Note: Before migrating resources you need to ensure you use the latest version of Terraform and have a clean configuration.
What has Changed
service_offering Removed, instance_type Required
service_offering only held the size of the instance type, the family being implicitly standard. Replace it with instance_type, in the <family>.<size> format. The Exoscale CLI lists the available instance types:
exo compute instance-type list
Before (v0.75.x):
resource "exoscale_instance_pool" "my_instance_pool" {
# ...
service_offering = "medium"
}After (v0.76.x):
resource "exoscale_instance_pool" "my_instance_pool" {
# ...
instance_type = "standard.medium"
}If you are not sure of the current type of a pool, terraform state show prints it as instance_type. References to exoscale_instance_pool.<name>.service_offering must be replaced as well, e.g. with split(".", exoscale_instance_pool.<name>.instance_type)[1].
instances and virtual_machines are Read-Only
instances and virtual_machines are computed by the provider: the values set in the configuration were ignored. They can no longer be set, remove any instances { ... } block or virtual_machines argument from your configuration.
Before (v0.75.x):
resource "exoscale_instance_pool" "my_instance_pool" {
# ...
instances {
name = "my-instance"
}
}After (v0.76.x):
resource "exoscale_instance_pool" "my_instance_pool" {
# ...
}References to their values are unchanged, e.g. exoscale_instance_pool.my_instance_pool.instances[*].public_ip_address. virtual_machines remains deprecated in favour of instances[*].id.
Removing description, labels or user_data
Removing description, labels or user_data from the configuration now clears them on the Instance Pool; it used to have no effect. If your configuration doesn’t set one of them but the Instance Pool has it, the next plan shows its removal: add it back to the configuration to keep it.
Migration Steps
1. Update Provider Version
terraform {
required_providers {
exoscale = {
source = "exoscale/exoscale"
version = "~> 0.76.0"
}
}
}2. Update Your Configuration
For every exoscale_instance_pool resource:
- Replace
service_offering = "<size>"withinstance_type = "standard.<size>", as shown above. - Remove any
instancesblock andvirtual_machinesargument.
3. Verify Changes
After updating your configuration:
- Run
terraform init -upgradeto upgrade the provider. - Run
terraform apply -refresh-onlyonce. Terraform silently upgrades the on-disk/remote state of everyexoscale_instance_poolresource to the new schema as part of this refresh. - Run
terraform planto verify there are no further changes.
You should see output similar to:
No changes. Your infrastructure matches the configuration.
Terraform has compared your real infrastructure against your configuration
and found no differences, so no changes are needed.