kubernetes/kops · error
linode subnet %q requires a region
Error message
linode subnet %q requires a region
What it means
Linode NetworkModelBuilder.Build() requires each cluster subnet to specify a Region, since Linode subnets/VPCs are region-scoped and instances are placed by region. An empty subnet.Region fails validation with this error, reported under the subnet's display name.
Source
Thrown at pkg/model/linodemodel/network.go:52
func (b *NetworkModelBuilder) Build(c *fi.CloudupModelBuilderContext) error {
if len(b.Cluster.Spec.Networking.Subnets) == 0 {
return fmt.Errorf("linode VPC requires at least one subnet")
}
seenSubnetNames := map[string]string{}
region := ""
for i, subnet := range b.Cluster.Spec.Networking.Subnets {
subnetName := subnet.Name
if subnetName == "" {
subnetName = fmt.Sprintf("subnet %d", i)
}
if subnet.Name == "" {
return fmt.Errorf("linode subnet %q requires a name", subnetName)
}
if subnet.Region == "" {
return fmt.Errorf("linode subnet %q requires a region", subnetName)
}
if subnet.CIDR == "" {
return fmt.Errorf("linode subnet %q requires a CIDR", subnetName)
}
normalizedSubnetName := linode.NormalizeLinodeLabel(b.ClusterName() + "-" + subnet.Name)
if previousSubnetName, found := seenSubnetNames[normalizedSubnetName]; found {
return fmt.Errorf("linode subnets %q and %q normalize to the same label %q", previousSubnetName, subnetName, normalizedSubnetName)
}
seenSubnetNames[normalizedSubnetName] = subnetName
if region == "" {
region = subnet.Region
continue
}
if subnet.Region != region {
return fmt.Errorf("linode subnets must all use the same region; found %q and %q", region, subnet.Region)
}View on GitHub (pinned to 4c8573c808)
Solutions
- Set region on each subnet in cluster.spec.networking.subnets to a valid Linode region (e.g. us-east).
- Confirm the YAML key is region, not zone or location.
- Ensure all subnets use the same region — the builder enforces a single region per Linode cluster.
- Re-run kops update cluster after fixing.
Example fix
// before - name: us-east-1a cidr: 10.0.0.0/24 // after - name: us-east-1a region: us-east cidr: 10.0.0.0/24
Defensive patterns
Strategy: validation
Validate before calling
for i, s := range cluster.Spec.Networking.Subnets {
if s.Region == "" {
return fmt.Errorf("subnet %q missing region", s.Name)
}
}
// also confirm all regions are identical
seen := map[string]bool{}
for _, s := range cluster.Spec.Networking.Subnets {
seen[s.Region] = true
}
if len(seen) > 1 {
return errors.New("all Linode subnets must be in the same region")
} Prevention
- Set region per subnet; Linode does not use a cluster-level region like AWS.
- Use valid Linode region slugs (e.g. us-east, eu-central).
- Keep all subnets in a single region for one Linode cluster.
- Check YAML keys carefully when porting from other providers.
When it happens
Trigger: A cluster.spec.networking.subnets entry for a Linode cluster with name and CIDR set but region empty or misspelled key (e.g. zones instead of region).
Common situations: Porting an AWS cluster spec where region is cluster-level rather than per-subnet; typos in YAML keys; template variables that failed to substitute the region value.
Related errors
- linode VPC requires at least one subnet
- linode subnet %q requires a name
- linode subnet %q requires a CIDR
- Subnet.VPC is required
- Subnet.VPC.ID is required
AI-assisted analysis of kubernetes/kops@4c8573c808 (2026-09-05).
Data as JSON: /api/errors/c0d0f1d9195724c6.
Report an issue: GitHub.